获取BufferedImage的RGB

kot*_*oko 18 java bufferedimage

任何人都可以解释如何从BufferedImage获取rgb值数组吗?

我在BufferedImage中有一个灰度图像,需要提取一个0到255的数组来描述图像.
我知道BufferedImage是正确的,因为我可以将它保存到PNG.但是,如果我使用,int[] dataBuffInt = ((DataBufferInt) heightMap.getDataBuffer()).getData();我会得到一堆巨大的负数.

我已经搜索了一段时间,并看到了一些转移某些值的帖子(帖子),但并不真正理解他们在说什么.

基本上我想从BufferedImage转到0到25​​5 RBG值的数组.
我不确定我是否正确解释了自己,需要更多详细信息.

编辑:
@Garbage感谢您的提示.我试过int [] dataBuffInt = heightMap.getRGB(0,0,heightMap.getWidth(),heightMap.getHeight(),null,0,heightMap.getWidth()); 但得到相同的结果.
@Greg Kopff结果是2,它被设置为TYPE_INT_ARGB

dac*_*cwe 27

您得到负数,因为您从其中一个像素获得的int值由红色,绿色,蓝色和alpha组成.您需要分割颜色以获取每个颜色分量的值.

要做到这一点,最简单的方法是创建一个Color对象,并使用getRed,getGreengetBlue(藏汉为getAlpha)方法来获取组件:

public static void main(String... args) throws Exception {

    BufferedImage image = ImageIO.read(
         new URL("http://upload.wikimedia.org/wikipedia/en/2/24/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
}
Run Code Online (Sandbox Code Playgroud)

输出:

173
73
82
255
Run Code Online (Sandbox Code Playgroud)