我有一个TYPE_BYTE_GRAY的BufferedImage,我需要得到x,y的像素值。我知道我不能使用getRGB,因为它返回错误的颜色模型,所以我该怎么办呢?非常感谢!
答案 0 :(得分:2)
通过调用java.awt.image.Raster
方法从BufferedImage
获取getData()
。
然后使用
int getSample(int x, int y, int b)
on received object,其中b是颜色通道(其中每种颜色由8位表示)。
灰度
b = 0.
对于RGB图像
b = 0 ==>> R channel,
b = 1 ==>> G channel,
b = 2 ==>> B channel.
答案 1 :(得分:1)
我猜你想要的是用一个数字来表示RGB中的灰度等级的数学,几乎没有差异,跟随其中一些:
亮度法平均最突出,最不突出 颜色:(max(R,G,B)+ min(R,G,B))/ 2。
平均方法简单地平均值:(R + G + B)/ 3.
发光度方法是平均值的更复杂版本 方法。它还对值进行平均,但它形成加权平均值 考虑到人类的感知。我们对绿色比对绿色更敏感 其他颜色,所以绿色加权最重。的公式 发光度为0.21 R + 0.71 G + 0.07 B。
参考:http://www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale/
答案 2 :(得分:0)
如果您有一个名为grayImg的BufferedImage,其类型为TYPE_BYTE_GRAY
int width = grayImg.getWidth();
int height = grayImg.getHeight();
byte[] dstBuff = ((DataBufferByte) grayImg.getRaster().getDataBuffer()).getData();
然后(x,y)的灰度值就是:
dstBuff[x+y*width] & 0xFF;