我想提取图像像素的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));
这种行为的原因是什么?
答案 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();
现在你可以简单地做一些数学运算,但这更简单,更具可读性 - 恕我直言