我有一个 TYPE_BYTE_GRAY 的 BufferedImage,我需要获取 x,y 处的像素值。我知道我不能使用 getRGB 因为它返回错误的颜色模型所以我该怎么做呢?非常感谢!
3 回答
Get java.awt.image.Raster
from BufferedImage
by invoking getData()
method.
Then use
int getSample(int x, int y, int b)
on received object, where b is the color channel (where each color is represented by 8 bits).
For gray scale
b = 0.
For RGB image
b = 0 ==>> R channel,
b = 1 ==>> G channel,
b = 2 ==>> B channel.
我想您要寻找的是获得一个数字来表示该 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/
前提是您有一个名为 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;