获取BufferedImage的RGB
任何人都可以解释如何从BufferedImage获取rgb值数组吗?
我在BufferedImage中有一个灰度图像,需要提取一个0到255的数组来描述图像。
我知道BufferedImage是正确的,因为我可以将它保存到PNG。 但是,如果我使用int[] dataBuffInt = ((DataBufferInt) heightMap.getDataBuffer()).getData();
我得到了一堆巨大的负数。
我已经搜索了一段时间,并看到了一些转移某些值的post ( post ),但并不真正理解他们在说什么。
基本上我想从BufferedImage转到0到255 RBG值的数组。
我不确定我是否正确解释了自己,需要更多细节。
编辑:
@Garbage感谢您的提示。 我试过int [] dataBuffInt = heightMap.getRGB(0,0,heightMap.getWidth(),heightMap.getHeight(),null,0,heightMap.getWidth()); 但得到相同的结果。
@Greg Kopff结果是2,它被设置为TYPE_INT_ARGB
你得到负数,因为从一个像素得到的int值由红色,绿色,蓝色和alpha组成。 您需要分割颜色以获取每个颜色分量的值。
最简单的方法是创建一个Color
对象,并使用getRed
, getGreen
和getBlue
(以及getAlpha
)方法来获取组件:
public static void main(String... args) throws Exception { BufferedImage image = ImageIO.read( new URL("http://sofzh.miximages.com/java/Lenna.png")); int w = image.getWidth(); int h = image.getHeight(); int[] dataBuffInt = image.getRGB(0, 0, w, h, null, 0, w); Color c = new Color(dataBuffInt[100]); System.out.println(c.getRed()); // = (dataBuffInt[100] >> 16) & 0xFF System.out.println(c.getGreen()); // = (dataBuffInt[100] >> 8) & 0xFF System.out.println(c.getBlue()); // = (dataBuffInt[100] >> 0) & 0xFF System.out.println(c.getAlpha()); // = (dataBuffInt[100] >> 24) & 0xFF }
输出:
173 73 82 255