将图像转换为颜色数组

3

我在Java中加载一张图片,想要将其转换为RGB数组,以便读取每个像素的颜色。我在Google上搜索过,但只找到了如何将Color数组转换为图像。


请查看文档http://docs.oracle.com/javase/6/docs/api/java/awt/image/BufferedImage.html,特别是`getRGB()`。 - Reinstate Monica -- notmaynard
如何将图像转换为BufferedImage? - jalgames
你是如何加载你的“Image”的?很可能你只需要传递一个“BufferedImage”。 - Reinstate Monica -- notmaynard
或者您可以将您的“Image”转换为“BufferedImage”。如果您发布加载图像的代码,我可以更具体地说明。 - Reinstate Monica -- notmaynard
1个回答

3
以下是API方法的使用示例:
BufferedImage bi = ImageIO.read( new File( "image.png" ) );
int[] data = ( (DataBufferInt) bi.getRaster().getDataBuffer() ).getData();
for ( int i = 0 ; i < data.length ; i++ ) {
    Color c = new Color(data[i]);
    // RGB is now accessible as
    c.getRed();
    c.getGreen();
    c.getBlue();
}

如果您因颜色模型而遇到问题,请先创建一份副本。

BufferedImage img2 = new BufferedImage( bi.getWidth(), bi.getHeight(), BufferedImage.TYPE_INT_RGB );

img2.getGraphics().drawImage( bi, 0, 0, null );

在上述代码中使用img2。

“img”代表我想转换的图像吗? - jalgames
@user2241553 抱歉,那是个错误,我已经修复了。 - stacker
为什么 data.lengthimg.width*img.height 大? - Giannis Tzagarakis
1
@GiannisTzagarakis 这是因为宽度*高度是像素数,而一个像素可以有多于一个字节的信息(例如RGB值加上alpha通道,这取决于图像类型,如BufferedImage.TYPE_INT_RGB)。 - stacker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接