任何人都知道将<BufferedImage> getRGB(i,j)
返回的RGBint值转换为灰度值的简单方法吗?
我打算通过使用它来分解它们来简单地平均RGB值;
int alpha = (pixel >> 24) & 0xff;
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = (pixel) & 0xff;
然后是红色,绿色,蓝色。
但我觉得这样一个简单的操作我一定会错过一些东西......
在回答了一个不同的问题之后,我应该清理我想要的东西。
我想从getRGB(i,j)返回RGB值,并将其转换为0-255范围内的白色值,表示该像素的“暗度”。
这可以通过平均等来实现,但我正在寻找OTS实现来节省几行。
答案 0 :(得分:8)
此tutorial显示了3种方法:
更改ColorSpace
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
ColorConvertOp op = new ColorConvertOp(cs, null);
BufferedImage image = op.filter(bufferedImage, null);
绘制为灰度BufferedImage
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_BYTE_GRAY);
Graphics g = image.getGraphics();
g.drawImage(colorImage, 0, 0, null);
g.dispose();
使用GrayFilter
ImageFilter filter = new GrayFilter(true, 50);
ImageProducer producer = new FilteredImageSource(colorImage.getSource(), filter);
Image image = this.createImage(producer);
答案 1 :(得分:3)
这并不像听起来那么简单,因为有is no 100% correct answer for how to map a colour to greyscale.
我使用的方法是将RGB转换为HSL然后转换为S部分(并且可选地转换回RGB),但这可能不是您想要的。 (它相当于最高和最低rgb值的平均值,因此与所有3的平均值略有不同)
答案 2 :(得分:0)