私は8bppIndexedグレースケールイメージをメモリにロードし、ピクセル値を読み込みます。問題は、ピクセルから取得した値が実際のイメージと一致していないように見えることです。常に暗くなります。私の画像は、このような単純な灰色の勾配である:右下の画素191を返すとトップ左上が実際に64であり、右下はここ255C#のビットマップイメージの濃淡の問題
である0を左
画像をロードする方法:
Bitmap threshImg = new Bitmap(@"C:\grey.bmp");
PixelFormatを確認すると、Format8bppIndexedになっていることが確認されます。私は、それぞれのコーナーに正しい色値を参照
BitmapData data = threshImg.LockBits(new Rectangle(0, 0, rectWidth, rectHeight), ImageLockMode.ReadOnly, PixelFormat.Format8bppIndexed);
unsafe
{
byte* pixel = (byte*)data.Scan0.ToPointer();
int topVal = (int)(byte)pixel[0];
int bottomVal = (int)(byte)pixel[((threshImg.Height * threshImg.Width)) - 1];
}
threshImg.UnlockBits(data);
を私は24bppRbgに画像を変換する(それに応じてコードを調整する)場合:ので、私はそうのような左、右下の画素と上面を読み取ります。
なぜ8bppIndexed画像を使用すると、より暗い値になるのですか?
カラーパレットを見て、インデックスが正しい色に一致しました。私はちょうどパレットが256色をカバーするグレースケールの均等分布であると仮定しましたが、実際にはインデックス192からの64色の黒色の範囲がありました:-) – badbod99