【发布时间】:2012-08-11 04:15:00
【问题描述】:
我有这张图片:
我想在int[] 中提取此图像的 RGB 值。这是我迄今为止对 PNG 图像所做的:
File f = new File("t.jpg");
BufferedImage img = ImageIO.read(f);
int[] ib = img.getRGB(0, 0, img.getWidth(), img.getHeight(), null, 0, img.getWidth());
Color c = new Color(ib[0]);
System.out.println(c.getRed() + " " + c.getGreen() + " " + c.getBlue());
但在这里我得到了这个输出:255 128 128,这是意料之外的,因为我清楚地看到(并且已经在几个图像编辑器中验证)(0,0)处的像素具有这些值255 255 255。
我注意到img.getType() 返回的类型等于TYPE_3BYTE_BGR,所以我猜这是幕后发生的解码问题,但我不知道如何解决它(或者更清楚地了解正在发生的事情)。
有人对如何正确解码这种类型有建议吗?
【问题讨论】:
-
您可以通过将文件上的图像绘制成一个新的 BufferedImage 来将其转换为 TYPE_INT_RGB。但粗糙且准备就绪,但应该可以工作
-
@Eng.Fouad 1. 因为这种方法效率更高。 2.因为它很有可能返回相同的结果(虽然我还没有测试过)
-
@HovercraftFullOfEels 我想到了,但是 [0,0] 像素值为 0xffff8080,在 CMYK 中不会产生白色。我什至检查了实验室以防万一,但这也不起作用。
标签: java image image-processing jpeg rgb