c#尝试读取写保护内存位图

c#尝试读取写保护内存位图,c#,bitmap,C#,Bitmap,我只是尝试将一个位图复制到另一个位图,并更改颜色值。我总是遇到同样的例外 Project.exe中发生类型为“System.AccessViolationException”的未处理异常 其他信息:尝试读取或写入受保护内存。这通常表示其他内存已损坏 当mm的值达到512且m为0时,错误总是发生。代码如下: public void PrintYBitmapUnsafe() { YBitmap = (Bitmap)myBitmap.Clone(); BitmapData bmData

我只是尝试将一个位图复制到另一个位图,并更改颜色值。我总是遇到同样的例外

Project.exe中发生类型为“System.AccessViolationException”的未处理异常 其他信息:尝试读取或写入受保护内存。这通常表示其他内存已损坏

当mm的值达到512且m为0时,错误总是发生。代码如下:

public void PrintYBitmapUnsafe()
{
    YBitmap = (Bitmap)myBitmap.Clone();
    BitmapData bmData = this.myBitmap.LockBits(new Rectangle(0, 0, myBitmap.Width, myBitmap.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
    BitmapData bmData1 = YBitmap.LockBits(new Rectangle(0, 0, YBitmap.Width, YBitmap.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
    int stride = bmData.Stride;
    System.IntPtr scan0 = bmData.Scan0;
    System.IntPtr scan00=bmData1.Scan0;
    unsafe
    {
        int offset = stride - myBitmap.Width * 3;
        int offset1 = bmData1.Stride - YBitmap.Width * 3;
        int pixelRowLength = myBitmap.Width * 3;
        byte* pp = (byte*)(void*)scan00;
        byte* p = (byte*)(void*)scan0;
        Object thisLock = new Object();
        for (int y = 0; y < myBitmap.Height; y++)
        {
            for (int x = 0; x < pixelRowLength; ++x)
            {
                int m = x;
                int mm = y;
                double pixelY = p[0] * 0.114;
                pixelY += p[1] * 0.587;
                pixelY += p[2] * 0.29;

                pp[0] = (byte)Math.Floor(pixelY);
                pp[1] = (byte)Math.Floor(pixelY);
                pp[2] = (byte)Math.Floor(pixelY);
                p = p + 3;
                pp = pp + 3;
            }
            pp = pp + offset1;
            p = p + offset;
        }
    }
    myBitmap.UnlockBits(bmData);
    YBitmap.UnlockBits(bmData1);
}
public void PrintYBitmapUnsafe()
{
YBitmap=(位图)myBitmap.Clone();
BitmapData bmData=this.myBitmap.LockBits(新矩形(0,0,myBitmap.Width,myBitmap.Height),ImageLockMode.ReadWrite,PixelFormat.Format24bppRgb);
BitmapData bmData1=YBitmap.LockBits(新矩形(0,0,YBitmap.Width,YBitmap.Height),ImageLockMode.ReadWrite,PixelFormat.Format24bppRgb);
int stride=bmData.stride;
System.IntPtr scan0=bmData.scan0;
System.IntPtr scan00=bmData1.Scan0;
不安全的
{
int offset=stride-myBitmap.Width*3;
int offset1=bmData1.Stride-YBitmap.Width*3;
int pixelRowLength=myBitmap.Width*3;
字节*pp=(字节*)(空*)扫描00;
字节*p=(字节*)(空*)扫描0;
对象thisLock=新对象();
对于(int y=0;y
for(int y=0;yp[2]就不会抛出?我假设
p[y]
y==myBitmap.Height
时起作用,但是
p[y+3]
超出了
myBitmap.Height
的范围。