使用下面的代码访问三个不同位图的像素数据时出现此错误:
尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
C#代码:
var bmpDataA = bitmap.LockBits(bounds, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
var bmpDataB = bitmap2.LockBits(bounds, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
var bmpDataC = bitmap3.LockBits(bounds, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
const int width = 1280;
const int height = 720;
int npixels = width * height;
unsafe
{
int* pPixelsA = (int*)bmpDataA.Scan0.ToPointer();
int* pPixelsB = (int*)bmpDataB.Scan0.ToPointer();
int* pPixelsC = (int*)bmpDataC.Scan0.ToPointer();
for (int i = 0; i < npixels; ++i)
{
if (pPixelsA[i] == pPixelsB[i]) // <--- Error occurs on this line
{
pPixelsC[i] = Color.Black.ToArgb();
}
}
}
bitmap.UnlockBits(bmpDataA);
bitmap2.UnlockBits(bmpDataB);
bitmap3.UnlockBits(bmpDataC);
使用调试器,我可以看到变量npixels
= 921600,当错误发生时(for 循环)变量i
= 691200。所以不确定问题出在哪里。如果我将像素格式更改为 32bppRgb,则没有问题,并且工作正常。只是不想使用 24bppRgb。有任何想法吗?谢谢。:)