2

「保護されたメモリの読み取りまたは書き込みを試みました。これは多くの場合、他のメモリが破損していることを示しています。」

コードのMarshal.Copy部分でこのエラーが発生しています。私のデータは破損も保護もされていないと確信しています。

どのような場合に発生するのか気になりました。ビットマップの List<> があります。これは、最初のインデックス [0] を処理するときにのみ発生します。

だからここに私がそれをした方法があります:-最初に、私はこのコードを使用しました[このコードはビットマップのピクセルデータを取得します] :

        Bitmap tmp_bitmap = BitmapFromFile[0];

        Rectangle rect = new Rectangle(0, 0, tmp_bitmap.Width, tmp_bitmap.Height);
        System.Drawing.Imaging.BitmapData bmpData =
            tmp_bitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite,
            PixelFormat.Format24bppRgb);

        int length = bmpData.Stride * bmpData.Height;

        byte[] bytes = new byte[length];

        // Copy bitmap to byte[]
        Marshal.Copy(bmpData.Scan0, bytes, 0, length);
        tmp_bitmap.UnlockBits(bmpData);

正常に動作し、エラーは発生しません。

次に、このコードを適用します[これにより、ピクセル データ ライン スキャン パディングが削除されます] :

 byte[] bytes = new byte[bmpData.Width * bmpData.Height * 3];
 for (int y = 0; y < bmpData.Height; ++y) {
 IntPtr mem = (IntPtr)((long)bmpData.Scan0 + y * bmpData.Stride * 3);
 Marshal.Copy(mem, bytes, y * bmpData.Width * 3, bmpData.Width * 3); //This is where the exception is pointed.
 }

最初の画像を処理しているときはいつでもそのエラーが発生します-最後から2番目、まったく問題ありません。

これで私を助けてくれることを願っています。前もって感謝します。

4

1 に答える 1