从ColorModel获取RGB组件

时间:2014-02-10 01:22:40

标签: java colors rgb pixel raster

我想提取图像像素的R,G和B值。我这样做有两种方式。

File img_file = new File("../foo.png");
BufferedImage img = ImageIO.read(img_file);

第一种方法(工作正常):

img.getRaster().getPixel(i, j, rgb);

第二种方法(抛出新的IllegalArgumentException(“每个像素多个组件”))

red = img.getColorModel().getRed(img.getRGB(i, j));

这种行为的原因是什么?

2 个答案:

答案 0 :(得分:1)

通常,当我想从BufferedImage中提取RGB时,我会这样做:

File img_file = new File("../foo.png");
BufferedImage img = ImageIO.read(img_file);

Color color = new Color(img.getRGB(i,j));
int red = color.getRed();

答案 1 :(得分:0)

基于JavaDocs

  

如果像素值为此,则抛出IllegalArgumentException   ColorModel不能方便地表示为单个int

这表明底层颜色模型可由单个int

表示

您可能还想查看this answer了解更多详情

通常,您只需从图片中获取int打包像素,然后使用Color生成Color表示形式,然后从中提取值...

首先,在int ...

处获取像素的x/y打包值
int pixel = img.getRGB(i, j);

用它来构造Color对象......

Color color = new Color(pixel, true); // True if you care about the alpha value...

提取R,G,B值...

int red = color.getRed();
int green = color.getGreen();
int blue = color.getBlue();

现在你可以简单地做一些数学运算,但这更简单,更具可读性 - 恕我直言