메모리에 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