Java 获取BuffereImage的RGB

Java 获取BuffereImage的RGB,java,bufferedimage,Java,Bufferedimage,有人能解释一下如何从BuffereImage获取rgb值数组吗 我在BuffereImage中有一个灰度图像,需要提取一个由0到255个值组成的数组来描述该图像。 我知道BuffereImage是正确的,因为我可以将其保存到PNG。但是,如果我使用int[]dataBuffInt=((DataBufferInt)heightMap.getDataBuffer()).getData()我得到一堆巨大的负数 我已经搜索了一段时间,看到了一些关于转换某些值()的引用,但并不真正理解它们在说什么 基本上

有人能解释一下如何从BuffereImage获取rgb值数组吗

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

我已经搜索了一段时间,看到了一些关于转换某些值()的引用,但并不真正理解它们在说什么

基本上我想从一个BuffereImage变成一个0到255个RBG值的数组。
我不确定我是否正确解释了自己,请询问更多细节

编辑:

@垃圾谢谢你的提示。我尝试了int[]dataBuffInt=heightMap.getRGB(0,0,heightMap.getWidth(),heightMap.getHeight(),null,0,heightMap.getWidth());但是得到同样的结果。

@Greg Kopff结果是2,它被设置为TYPE_INT_ARGB

因为从其中一个像素获得的INT值由红色、绿色、蓝色和alpha组成,所以您会得到负数。您需要拆分颜色以获得每个颜色组件的值

最简单的方法是创建一个对象,并使用、和(以及)方法获取组件:

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
}
产出:

173
73
82
255

BuffereImage.getType()的结果是什么?您是否尝试过@Garbage谢谢提示。我尝试了int[]dataBuffInt=heightMap.getRGB(0,0,heightMap.getWidth(),heightMap.getHeight(),null,0,heightMap.getWidth());但是得到同样的结果。非常感谢!只是为了检查一下,为了找到图像中所有的点,我必须做一些循环,没有其他更有效的方法了,对吗?将示例更改为使用
int[]getRGB(…)
返回的数据。数据以
ARGB
模式返回,因此您可以自己提取颜色组件,但请始终先进行配置文件,而不是过早进行优化。:)添加了一种“更快”的方法,可以使用bitfiddling获得相同的东西hi all,是在上述代码@kotoko中获得的图像的平均rgb