5

我有一个 TYPE_BYTE_GRAY 的 BufferedImage,我需要获取 x,y 处的像素值。我知道我不能使用 getRGB 因为它返回错误的颜色模型所以我该怎么做呢?非常感谢!

4

3 回答 3

2

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.
于 2011-11-21T18:06:16.207 回答
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/

于 2011-11-21T18:00:25.853 回答
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;
于 2015-08-11T01:20:19.137 回答