当前位置: 首页 > 知识库问答 >
问题:

获取BufferedImage的RGB

禄源
2023-03-14

谁能解释一下如何从BufferedImage中获得一个rgb值数组?

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

我搜索了一段时间,看到了一些关于转移一些价值观的参考(帖子),但并不真正理解他们在说什么。

基本上,我想从BufferedImage转到0到255个RBG值的数组。
我不确定我是否正确地解释了自己,需要更多细节。

编辑:< br > @垃圾谢谢提示。我试过int[]dataBuffInt = height map . get RGB(0,0,heightMap.getWidth(),heightMap.getHeight(),null,0,height map . get width());但是得到同样的结果。< br> @Greg Kopff结果是2,它被设置为TYPE_INT_ARGB

共有1个答案

融渊
2023-03-14

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

最简单的方法是创建一个< code>Color对象,并使用< code>getRed、< code>getGreen和< code>getBlue(以及< code>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
}

产出:

173
73
82
255
 类似资料:
  • 谁能解释一下如何从BufferedImage中获得一个rgb值数组? 我在BufferedImage中有一个灰度图像,需要提取一个描述图像的0到255个值的数组。 我知道BufferedImage是正确的,因为我可以将其保存为PNG。但是,如果我使用我得到一堆巨大的负数。 我搜索了一段时间,看到了一些关于转移一些价值观的参考(帖子),但并不真正理解他们在说什么。 基本上,我想从BufferedIm

  • 问题内容: 我正在使用蜡染来处理SVG图像。有什么办法可以从SVG文件中获取java.awt.image.BufferedImage吗? 我知道有一些转码器,我可以使用它们将SVG转码为PNG,然后使用ImageIO.read()加载该PNG,但是我不想拥有临时文件。 问题答案: 使用蜡染,如下所示:

  • 问题内容: 如何从BufferedImage对象获取InputStream?我尝试了这个,但是ImageIO.createImageInputStream()总是返回NULL 图片缩略图已正确生成,因为我可以成功将 bigImage绘制 到 JPanel 。 谢谢。 问题答案: 如果您尝试将图像保存到文件,请尝试: 如果您只想读取字节,请尝试执行写调用,但将其传递给ByteArrayOutputS

  • 问题内容: 有人知道将返回的RGBint值转换为灰度值的简单方法吗? 我将使用此方法将它们分解,从而对RGB值进行平均。 然后平均红色,绿色,蓝色。 但是我觉得对于这样一个简单的操作,我一定会缺少一些东西… 在很好地回答了另一个问题之后,我应该弄清我想要的东西。 我想获取从getRGB(i,j)返回的RGB值,并将其转换为代表该像素“暗度”的0-255范围内的白色值。 这可以通过平均等来完成,但是

  • 问题内容: 我熟悉处理图像。我从URL检索/读取图像,其中URL没有文件扩展名。然后,我希望将图像写入/保存到本地存储,但是我必须指定图像文件扩展名(即JPG,PNG等),而我无法通过BufferedImage检索其扩展名。 请指出一下该如何做?任何其他方法都可以。 问题答案: 使用ImageReader.getFormatName() 您可以使用ImageIO.getImageReaders(O