处理位图:

处理位图:
(1)AWT也允许在组件上绘制位图。Graphics提供了drawImage()方法用于绘制位图,该方法需要一个Image参数-代表位图,通过该方法就可以绘制出指定的位图
(2)Image抽象类和BufferedImage实现类:
Image类代表位图,但他是一个抽象类,无法直接创建Image对象,为此Java为他提供了BufferedImage子类,这个子子类是可以访问图像数据缓冲区的Image实现类。该类提供了一个简单的构造器,用于创建一个BufferedImage对象.
BufferedImage(int width,int height,imageType):创建指定大小、指定图像类型的BufferedImage对象,其中imageType可以是BufferedImage.TYPE_INT_RGB等值

(3)除此之外,BufferedImage还提供了一个getGraphics()方法返回该对象的Graphics对象,从而允许通过该Graphics对象向Image中添加图形。
(4)借助BufferedImage可以在AWT中实现缓冲技术—-当需要在GUI组件上绘制图形时,不要直接绘制到该GUI上,而是先将图形绘制到BufferedImage对象中,然后再调用组件的drawImage()方法一次性的将BufferedImage绘制到特定组件上。
(5)下面程序通过BufferedImage类是实现了图形缓冲,并实现了一个简单的手绘程序。

使用ImageIO输入输出位图:
(1)如果希望访问磁盘上的位图文件,列入GIF JPG等格式的位图,则需要使用ImageIO工具类。ImageIO使用ImageReader和ImageWriter读写图形文件。通常程序无需关心该类底层的实现细节,只需要利用该工具类来读写图形文件即可。
(2)ImageIO类并不支持读写全部格式的图形文件,程序可以通过ImageIO类的如下几个静态方法来访问该类所支持读写的图形读写的图形文件格式。
static String[] getReaderFileSuffixes() 返回一个String数组,该数组列出ImageIO所有能读的图形文件的文件后缀。
static String[] getReaderFormatNames() 返回一个String数组,该数组列出ImageIO所有能读的图形文件的非正式格式名称
static String[] getWriterFileSuffixes() 返回一个String数组,该数组列出ImageIO所有能写的图形文件的文件后缀。
static String[] getWriterFormatNames() 返回一个String数组,该数组列出ImageIO所有能写的图形文件的非正式格式名称

//下面程序测试了ImageIO所支持的全部文件格式。

import javax.imageio.ImageIO;
public class ImageIOTest{

     public static void main(String[] args){
           String[] readFormat=ImageIO.getReaderFormatNames();
           System.out.println("能读的所有图形文件格式");
           for(String tmp:readFormat){
                System.out.println(tmp);
           }

           String[] writeFormat=ImageIO.getReaderFormatNames();
           System.out.println("能写的所有图形文件格式");
           for(String tmp: writeFormat){
                System.out.println(tmp);

           }
     }
}

/可以看出,AWT并不支持ico格式的图标文件,因此,如果需要在Java程序中按钮,菜单等指定图标,也不要使用ico格式的图标文件,而应该使用JPG GIF等格式的图形文件。
(2)ImageIO类里包含两个静态方法:read() 和write(),通过这两个方法就可以完成对位图文件的读写,调用write()方法输出图形文件时需要指定输出的图形格式,例如GIF JPEG等:
//下面一个程序可以将一个原始位图缩小成另一个位图后输出:

import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class ZoomImage{

     //下面两个常量设置缩小后图片的大小
     private final int WIDTH=80;
     private final int HEIGHT=60;

     //定义一个BufferedImage对象,用于保存缩小后的位图
     BufferedImage image =new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
     Graphics g=image.getGraphics();

     public void zoom()
     throws Exception
     {
           //读取原始位图
           Image  srcImage =ImageIO.read(new File("image/01.jpg"));

           //将原始位图缩小后绘制到image中
           g.drawImage(srcImage, 0, 0, WIDTH, HEIGHT, null);
           //将image对象输出到磁盘文件中
           ImageIO.write(image, "jpeg", new File(System.currentTimeMillis()+".jpg"));

     }

     public static void main (String[] args){
           try {
                new ZoomImage().zoom();
           } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
           }
     }

}

你可能感兴趣的:(Java笔记)