在bmData.Scan0.ToInt32()上溢出;

时间:2012-11-23 09:31:58

标签: c# .net copy overflow buffer

我是编程这类东西的新手,搜索并没有帮助我。我在网上找到了以下代码并需要修改它,因为这给了我toint32()的溢出例外。

任何帮助表示赞赏!感谢

// lock bitmap data
BitmapData  bmData = img.LockBits(
new Rectangle(0, 0, width, height),
ImageLockMode.ReadWrite,
PixelFormat.Format24bppRgb);

// copy image data

int srcStride = bmData.Stride;
int dstStride = bmData.Stride;


      int dst = bmData.Scan0.ToInt32() + dstStride * (height - 1);
      int src = pBuffer.ToInt32();

                for (int y = 0; y < height; y++)
                {
                    Win32.memcpy(dst, src, srcStride);
                    dst -= dstStride;
                    src += srcStride;
                }

// unlock bitmap data
img.UnlockBits(bmData);

1 个答案:

答案 0 :(得分:2)

Scan0是一个指针,如果在64位模式下运行,使用ToInt32()会溢出。您必须使用ToInt64()并强制转换为IntPtr。你的memcpy()声明也是错误的。一些方便的声明:

private static IntPtr AddToPointer(IntPtr ptr, int offset) {
    return new IntPtr(ptr.ToInt64() + offset);
}

[DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern int memcpy(IntPtr dst, IntPtr src, int bytes);