이 다음과 같은 답이없는 질문의 반복이 될 수 있습니다잠금 포인터는 C# 비트 맵의 사각형을 잠글 때
Help with bitmap lock - Format8bppIndexed
나는 다음과 같은 방식으로 이미지를 잠금 해요 :
// PixelFormat is 8BppIndexed in my case.
Bitmap bmp = new Bitmap("mySampleImage.tif");
// ClipRectangle will be a Rectangle such as {x=128, y=290, width=250, height=200},
// selected by the user by seeing the image on screen. Thus, it's a valid region
BitmapData data = bmp.LockBits(rect, ImageLockMode.ReadOnly, bmp.PixelFormat);
unsafe
{
byte* origin = (byte*)data.Scan0.ToPointer();
// Processing...
}
에서 프로세싱 섹션에서, I는 ClipRectangle의 픽셀을 Y 방향으로 밟는다. 그러나 유효해야하는 픽셀은 포인터를 역 참조 할 수 없다는 메모리 액세스 오류로 반환됩니다. 사용하여 704x600 이미지의 예
:
ClipRectangle = {x=128, y=290, width=250, height=200}
화소 (128x321)
유효해야한다.
origin + (321 * stride) + 128 0x053a80c0 *(origin + (321 * stride) + 128): Cannot dereference 'origin + (321 * stride) + 128'. The pointer is not valid.
보폭은 704입니다, 내 소프트웨어의 논리가 정확한 포인터 중간 창으로 위치, 그래서 모든 것을 함께 제공 : 수동으로 중간 창에 픽셀을 얻기 위해 수학에 입력하여, 나는 다음과 같은 수 좋아 보인다. 290-320의 Y 픽셀은 역 참조 할 수 있습니다. 대신 전체 비트 맵을 잠그면 모든 논리가 잘 진행되지만 올바른 픽셀을 얻는 지 또는 LockBits에서 잠금 사각형을 사용하는 방법에 대한 의문이 생깁니다.
필요한 영역 만 잠글 때 BitmapData에서 예상되는 잠긴 픽셀에 액세스 할 수없는 이유는 무엇입니까?
나는 이것이 사실일지도 모른다고 생각하고 게시하기 전에 MSDN에 대해이 사실을 알기는했지만 절대로 발견하지 못했습니다. 감사. –