图像是由一组像素构成,用二进制形式保存的图片。java语言支持GIF、JPEG和BMP这3种主要图像文件格式。java语言的图像处理功能被封装在Image类中。

图像载入和输出

在java程序中,图像也是对象,所以载入图像时,先要声明Image对象,然后,利用getImage()方法把Image对象与图像文件联系起来。载入图像文件的方法有两个:

  • Image getImage(URL url),url指明图像所在位置和文件名。
  • Image getImage(URL url,String name),url指明图像所在位置,name是文件名。

例如,以下代码声明Image对象,并用getImage()对象与图像文件联系起来:

   Image img = getImage(getCodeBase(),”family.jpg”);

URL(uniform Resource Location 统一资源定位符)对象用于标识资源的名字和地址,在WWW客户机访问Internet网上资源时使用。确定图像位置的方法有两种:绝对位置与相对位置。取相对位置的方法有:

  • URL getCodeBase(),取小应用程序文件所在的位置。
  • URL getDocumentBase(),取HTML文件所在的位置。

例如,代码:

  URL picURLA = new URL(getDocumentBase(),”imageSample1.gif”),
picURLB = new URL(getDocumentBase(),”pictures/imageSample.gif”);
Image imageA = getImage(picURLA),imageB = getImage(picURLB);

获取图像信息(属性)的方法有:

  • getWidth(ImageObserver observer):取宽度;
  • getHeight(ImageObserver observer):取高度。

输出图像的代码写在paint()方法中,有4种显示图像的方法:

  • boolean drawImage(Image img,int x,int y,ImageObserver observer)
  • boolean drawImage(Image img,int x,int y,Color bgcolor,ImageObserver observer)
  • boolean drawImage(Image img,int x,int y,int width,int height,ImageObsever observer)
  • boolean drawImage(Image img,int x,int y,int width,int height,Color bgcolor,ImageObsever observer)

参数img是Image对象,x,y是绘制图像矩形的左上角位置,observer是加载图像时的图像观察器,bgcolor是显示图像用的底色,width和height是显示图像的矩形区域,当这个区域与图像的大小不同时,显示图像就会有缩放处理。

Applet类也实现ImageObserver接口,常用this作为实参。参见以下代码及注释:

  • (1) g.drawImage(image1,0,0,this);//原图显示
  • (2) g.drawImage(image2,10,10,Color.red,this);//图形加底色显示
    注意:如原图的大小与给定的范围不同,系统会自动缩放
  • (3) g.drawImage(labImag,0,0,this);// 原图显示
  • (4) g.grawImage(labImag,0,120,100,100,this);//缩放显示
  • (5) g.grawImage(labImag,0,240,500,100,this);//缩放显示

【例 12-5】小应用程序用init()或start()方法下载(获取)图像,用paint()方法显示得到的图像。

 import java.applet.*;import java.awt.*;
public class Example7_5 extends Applet{
Image myImag;
public void start(){
myImag = getImage(getCodeBase(),”myPic.jpg”);
}
public void paint(Graphics g){
g.drawImage(myImg,2,2,this);
}
}

由于在Frame、JFrame和JPanel等类中没有提供getImage()方法,它们载入图像需要使用java.awt.Toolkit中的Toolkit抽象类,该类有载入图像文件的方法:

  • Image.getImage(String name):按指定的文件名载入图像文件。
  • Image.getImage(URL url):统一资源定位符载入图像文件。

这样,各种组件可以用getToolkit()方法得到Toolkit对象,然后在组件的paint()方法中通过Toolkit对象显示图像。以下代码示意这样的用法:

 Toolkit tool = getToolkit();
URL url = new URL(http://www.weixueyuan.net/image.gif);
Image img = tool.getImage(url);

组件也可以使用Toolkit提供的静态方法getDefaultToolkit()获得一个缺省的Toolkit对象,并用它加载图像。此时,载入图像的代码常写成这样:

Image img = Toolkit.getDefaultToolkit().getImage(url);

系列文章:

Java知多少(100)图像处理基础的更多相关文章

  1. Java知多少(102)多媒体基础

    本节介绍 Java程序播放幻灯片和动画,播放声音和视频的方法. 播放幻灯片和动画 用实例说明播放幻灯片和动画的方法. [例 12-7]小应用程序先将幻灯片读入数组在存储,单击鼠标变换幻灯片,逐张显示. ...

  2. Java知多少(74)基础类库

    Java 的类库是 Java 语言提供的已经实现的标准类的集合,是 Java 编程的 API(Application Program Interface),它可以帮助开发者方便.快捷地开发 Java ...

  3. Java知多少(81)框架窗口基础

    窗口是GUI编程的基础,小应用程序或图形界面的应用程序的可视组件都放在窗口中,在GUI中,窗口是用户屏幕的一部分,起着在屏幕中一个小屏幕的作用.有以下三种窗口: Applet窗口:Applet类管理这 ...

  4. Java知多少(83)面板基础:JPanel和JScrollPane

    面板有两种,一种是普通面板(JPanel),另一种是滚动面板(JScrollPane). JPanel 面板是一种通用容器,JPanel的作用是实现界面的层次结构,在它上面放入一些组件,也可以在上面绘 ...

  5. Java知多少(95)绘图基础

    要在平面上显示文字和绘图,首先要确定一个平面坐标系.Java语言约定,显示屏上一个长方形区域为程序绘图区域,坐标原点(0,0)位于整个区域的左上角.一个坐标点(x,y)对应屏幕窗口中的一个像素,是整数 ...

  6. Java知多少(43)异常处理基础

    Java异常是一个描述在代码段中发生的异常(也就是出错)情况的对象.当异常情况发生,一个代表该异常的对象被创建并且在导致该错误的方法中被抛出(throw).该方法可以选择自己处理异常或传递该异常.两种 ...

  7. Java知多少(完结篇)

    Java知多少(1)语言概述 Java知多少(2)虚拟机(JVM)以及跨平台原理 Java知多少(3) 就业方向 Java知多少(4)J2SE.J2EE.J2ME的区别 Java知多少(5) Java ...

  8. Java知多少(下)

    Java知多少(78)Java向量(Vector)及其应用 Java知多少(79)哈希表及其应用 Java知多少(80)图形界面设计基础 Java知多少(81)框架窗口基础 Java知多少(82)标签 ...

  9. Java知多少(112)数据库之删除记录

    删除数据表也有3种方案 一.使用Statement对象 删除数据表记录的SQL语句的语法是: delete from 表名 where 特定条件 例如 : delete from ksInfo whe ...

随机推荐

  1. BZOJ.2242.[SDOI2011]计算器(扩展欧几里得 BSGS)

    同余方程都不会写了..还一直爆int /* 2.关于同余方程ax ≡b(mod p),可以用Exgcd做,但注意到p为质数,y一定有逆元 首先a%p=0时 仅当b=0时有解:然后有x ≡b*a^-1( ...

  2. 【漏洞复现】ES File Explorer Open Port Vulnerability - CVE-2019-6447

    漏洞描述 在受影响的ES文件浏览器上,会启用59777/tcp端口作为HTTP服务器,攻击者只需要构造恶意的json请求就可以对受害者进行文件下载,应用打开.更可以用过漏洞进行中间人(MITM)攻击. ...

  3. Python图形编程探索系列-09-tkinter与matplotlib结合案例

    案例1 案例来自于:https://bbs.csdn.net/topics/390326088 代码示例: import matplotlib matplotlib.use('TkAgg') from ...

  4. Python3正则表达式(4)

    正则表示式的子模式 使用()表示一个子模式,括号中的内容作为一个整体出现. (red)+  ==> redred, redredred, 等多个red重复的情况 子模式的扩展语法 案例1 tel ...

  5. Python问题之“NameError: name 'reload' is not defined”

    出现这个错误的原因是你使用的Python版本已经不再使用了 在Python2.x中会用到reload来解决中文乱码问题 import sys reload(sys) sys.setdefaultenc ...

  6. Java开发笔记(九十一)IO流处理简单的数据压缩

    前面介绍的文件I/O,不管是写入文本还是写入对象,文件中的数据基本是原来的模样,用记事本之类的文本编辑软件都能浏览个大概.这么存储数据,要说方便确实方便,只是不够经济划算,原因有二:其一,写入的数据可 ...

  7. 添加 vip

    两台机器:172.16.91.101 172.16.91.107 在91.101上增加虚拟ip,92网段的 ifconfig eth0:1 172.16.92.2 netmask 255.255.25 ...

  8. java知识思维图解

  9. SpringMvc+Mybatis+Maven+Mysql做一个CRUD的简单例子

    本文档结合 SpringMVC. Mybatis. MySQL,说明如何实现一个简单的数据库单表 CRUD操作.开发工具使用集成了spring mvc的eclipse(Spring Tool Suit ...

  10. 详解SpringMVC中Controller的方法中参数的工作原理

    Spring MVC中Controller的处理方法的参数可以是Integer,String,自定义对象,ServletRequest,ServletResponse,ModelAndView等等,非 ...