0

私はこの種のものをプログラミングするのは初めてで、検索は役に立ちませんでした。Web で次のコードを見つけました。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);
4

1 に答える 1

2

Scan0 はポインターです。ToInt32() を使用すると、64 ビット モードで実行するとオーバーフローします。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);
于 2012-11-23T09:39:54.527 に答える