TYPE_BYTE_GRAYのBufferedImageがあり、x、yのピクセル値を取得する必要があります。間違ったカラーモデルを返すため、getRGBを使用できないことはわかっていますが、どうすればよいですか?どうもありがとう!
3 に答える
メソッドを呼び出しjava.awt.image.Raster
てから取得します。BufferedImage
getData()
次に、
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.
あなたが探しているのは、その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/
タイプが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;