当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《使用Java的ImageIO将像素数组转换为Image对象?》经验,为你挑选了2个好方法。

我目前正在使用以下代码将像素值数组(最初使用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> Brendan Cash..:

您可以在不使用ImageIO的情况下创建图像.只需使用与像素数组内容匹配的图像类型创建BufferedImage.

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信息getImageFromArray.在PixelGrabber javadoc 的handlepixel方法中有一个这样的例子.完成后,请确保BufferedImage构造函数中的图像类型为BufferedImage.TYPE_INT_ARGB.


Chris,你得到一个AOOB异常,因为BufferedImage"image"的大小是width*height*3,因为它的类型为int RGB.看编辑.

2> mdm..:

使用我的光栅ArrayIndexOutOfBoundsException,当我创建的,甚至BufferedImageTYPE_INT_ARGB.但是,使用的setRGB(...)方法BufferedImage为我工作.

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有