부록을 쓰려고 시도 : 내가 "코드를 최적화"의 선택을 취소하면 제대로 실행 것으로 보인다 날이 C#을 보호 된 메모리를 읽거나 오류
은 첫째로 내가 관리되지 않는 코드를 실행하려고 몇 가지 기발한 구성 문제라고 생각에 이르게한다. "안전하지 않은 코드 허용"을 선택했습니다. 내가 상대적으로 느린 getPixel와를 사용하지 않고 비트 맵을 읽기 위해 노력하고 여기에 코드 줄을 가리키는 :byte[] buff = { scanline[xo], scanline[xo + 1], scanline[xo + 2], 0xff };
전체 조각은 다음과 같습니다. 이 문제를 어떻게 해결할 수 있습니까?
private const int PIXELSIZE = 4; // Number of bytes in a pixel
BitmapData mainImageData = mainImage.LockBits(new Rectangle(0, 0, mainImage.Width, mainImage.Height), ImageLockMode.ReadOnly, mainImage.PixelFormat);
List<Point> results = new List<Point>();
foundRects = new List<Rectangle>();
for (int y = 0; y < mainImageData.Height
{
byte* scanline = (byte*)mainImageData.Scan0 + (y * mainImageData.Stride);
for (int x = 0; x < mainImageData.Width; x++)
{
int xo = x * PIXELSIZE;
byte[] buff = { scanline[xo], scanline[xo + 1],
scanline[xo + 2], 0xff };
int val = BitConverter.ToInt32(buff, 0);
// Pixle value from subimage in desktop image
if (pixels.ContainsKey(val) && NotFound(x, y))
{
Point loc = (Point)pixels[val];
int sx = x - loc.X;
int sy = y - loc.Y;
// Subimage occurs in desktop image
if (ImageThere(mainImageData, subImage, sx, sy))
{
Point p = new Point(x - loc.X, y - loc.Y);
results.Add(p);
foundRects.Add(new Rectangle(x, y, subImage.Width,
subImage.Height));
}
}
}
무엇이 PIXELSIZE 값입니까? –
이미지의 형식이 32bppRGB입니까? 코드에서 픽셀 형식을 지정하거나 확인하지 마십시오. –
또한, 루프 앞에 한 번 포인터를 Scan0으로 설정 한 다음 PIXELSIZE로 내부 루프 내부에서 증가시킵니다. –