根据不同的使用场景创建一个BufferedImage对象有三种常见的方法。

第一种方法是创建一个全新的BufferedImage对象,直接调用BufferedImage的构造函数。其代码如下:

BufferedImage bi = new BufferedImage(width, height,
                BufferedImage.TYPE_BYTE_GRAY);

第二种方法是根据已经存在的BufferedImage对象创建一个相同的copy体。其代码如下:

public BufferedImage createBufferedImage(BufferedImage src) {
        ColorModel cm = src.getColorModel();
        BufferedImage image = new BufferedImage(
                cm,
                cm.createCompatibleWritableRaster(src.getWidth(), src.getHeight()),
                cm.isAlphaPremultiplied(),
                null);
        return image;
    }

第三种方法是通过创建ColorModel与Raster对象实现BufferedImage对象的实例化。其代码如下:

public BufferedImage createBufferedImage(int width, int height, byte[] pixels) {
        ColorModel cm = getColorModel();
        SampleModel sm = getIndexSampleModel((IndexColorModel) cm, width, height);
        DataBuffer db = new DataBufferByte(pixels, width * height, 0);
        WritableRaster raster = Raster.createWritableRaster(sm, db, null);
        BufferedImage image = new BufferedImage(cm, raster, false, null);
        return image;
    }

Java中提供了ImageIO工具类来实现图像文件与BufferedImage对象之间的转换。

读取一个图像文件的代码如下:

public BufferedImage readImageFile(File file) {
        try {
            BufferedImage image = ImageIO.read(file);
            return image;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

保存BufferedImage对象为图像文件的代码如下:

public void writeImageFile(BufferedImage bi) throws IOException {
        File outputfile = new File("saved.png");
        ImageIO.write(bi, "png", outputfile);
}