我是编程这类东西的新手,搜索并没有帮助我。我在网上找到了以下代码并需要修改它,因为这给了我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);
答案 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);