5

TYPE_BYTE_GRAYのBufferedImageがあり、x、yのピクセル値を取得する必要があります。間違ったカラーモデルを返すため、getRGBを使用できないことはわかっていますが、どうすればよいですか?どうもありがとう!

4

3 に答える 3

2

メソッドを呼び出しjava.awt.image.Rasterてから取得します。BufferedImagegetData()

次に、

int getSample(int x, int y, int b)

受信したオブジェクトで、bはカラーチャネルです(各色は8ビットで表されます)。

グレースケールの場合

b = 0.

RGB画像の場合

b = 0 ==>> R channel,
b = 1 ==>> G channel,
b = 2 ==>> B channel.
于 2011-11-21T18:06:16.207 に答える
1

あなたが探しているのは、そのRGBのグレースケールを表す1つの数値を取得するための数学だと思います。いくつかの異なる方法があり、それらのいくつかに従ってください。

明度法は、最も目立つ色と最も目立たない色を平均します:(max(R、G、B)+ min(R、G、B))/2。

平均法は、単純に値を平均します:(R + G + B)/3。

光度法は、平均法のより洗練されたバージョンです。また、値を平均しますが、人間の知覚を説明するために加重平均を形成します。私たちは他の色よりも緑に敏感なので、緑は最も重く重み付けされています。光度の式は0.21R+ 0.71 G +0.07Bです。

参照: http: //www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale/

于 2011-11-21T18:00:25.853 に答える
0

タイプがTYPE_BYTE_GRAYであるgrayImgという名前のBufferedImageがある場合

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 に答える