在 Java 应用程序中创建图像
在不严重牺牲性能的前提下绘制和着色简单的图形图像
Ivor Horton
2001 年 2 月 02 日发布
合成图像
您不必从文件中读取所有的图像 ―
您可以创建自己的图像。要创建自己的图像,最灵活的方法是用一个
BufferedImage 对象,它是
Image
类的一个子类,它把图像数据存储在一个可以被访问的缓冲区中。它还支持各种存储像素数据的方法:使用或不使用
alpha
通道、不同种类的颜色模型以及颜色组件的各种精确度。
ColorModel
类提供一种灵活的方法定义各种颜色模型,以和
BufferedImage
对象一起使用。为了理解颜色模型工作的基本知识,我们将只使用一个缺省的颜色模型,其颜色组件由
RGB 值和一个缓冲类型(存储 8 位的 RGB 颜色值加上一个 alpha
通道)组成。这一缓冲类型由
BufferedImage 类中的常量
TYPE_INT_ARGB 指定,它意味着每个像素要用一个
int 值。每个像素的值是以 8 位字节形式存储一个 alpha
组件加上 RGB 颜色组件。我们可以用给定的宽度和高度创建一个这种类型的
BufferedImage 对象,代码语句如下:int width = 200;
int height = 300;
BufferedImage image = new BufferedImage(width,
height,BufferedImage.TYPE_INT_ARGB);
这段代码创建了一个
BufferedImage 对象,它代表一个
200 像素宽、300
像素高的图像。为了应用这个图像,我们需要有图形上下文,而
BufferedImage 对象的
createGraphics()
方法就返回一个与该图像相关的
Graphics2D 对象:int width = 200;
Graphics2D g2D = image.createGraphics();
使用
g2D 对象的操作会修改
BufferedImage 对象 image
的像素。利用这个对象,您现在完全有能力应用
BufferedImage
对象。您可以绘制形状、图像、
GeneralPath
对象或任何别的东西,还可以为图形上下文设置 alpha
组合对象。您同时还拥有
Graphics2D
对象提供的全部仿射变形能力。
如果要从
BufferedImage
对象获取单个像素,可以通过调用它的
getRGB()
方法,并提供该像素的 x,y 坐标作为
int
类型的参数。这个像素会按
TYPE_INT_ARGB 格式以
int 类型返回,它由四个 8 位的值(代表 alpha 值和 RGB
颜色组件)组成一个 32 位字。同时