使用Java的ImageIO将像素数组转换为Image对象?

2022-09-01 14:24:20

我目前正在使用以下代码将一个像素值数组(最初是使用java.awt.image.PixelGrabber对象创建的)转换为Image对象:

public Image getImageFromArray(int[] pixels, int width, int height) {
    MemoryImageSource mis = new MemoryImageSource(width, height, pixels, 0, width);
    Toolkit tk = Toolkit.getDefaultToolkit();
    return tk.createImage(mis);
}

是否可以使用 ImageIO 包中的类获得相同的结果,这样我就不必使用 AWT 工具包了?

Toolkit.getDefaultToolkit() 似乎不是 100% 可靠的,有时会抛出一个 AWTError,而 ImageIO 类应该始终可用,这就是为什么我对改变我的方法感兴趣。


答案 1

可以在不使用 ImageIO 的情况下创建映像。只需使用与像素数组内容匹配的图像类型创建缓冲图像即可。

public static Image getImageFromArray(int[] pixels, int width, int height) {
            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
            WritableRaster raster = (WritableRaster) image.getData();
            raster.setPixels(0,0,width,height,pixels);
            return image;
        }

使用PixelGrabber时,不要忘记在调用 之前从像素数组中提取RGBA信息。在PixelGrabber javadoc的handlepixelmethod中有一个例子。执行此操作后,请确保在 BufferedImage 构造函数中的图像类型为 。getImageFromArrayBufferedImage.TYPE_INT_ARGB


答案 2

使用栅格,我在创建 .但是,使用的方法对我有用。ArrayIndexOutOfBoundsExceptionBufferedImageTYPE_INT_ARGBsetRGB(...)BufferedImage


推荐