以下のコードを使用して 3 つの異なるビットマップのピクセル データにアクセスすると、このエラーが発生します。
保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています。
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 で作業したくないだけです。何か案は?ありがとう。:)