-1

を使用してこのコードを vb.net に変換しようとしましMarshal.copyたが、動作させることができません

for (int y = 0; y < bitmapdata.Height; y++)
{
    byte* destPixels = (byte*)bitmapdata.Scan0 + (y * bitmapdata.Stride);
    for (int x = 0; x < bitmapdata.Width; x++)
    {
        destPixels[x * PixelSize] = contrast_lookup[destPixels[x * PixelSize]]; // B
        destPixels[x * PixelSize + 1] = contrast_lookup[destPixels[x * PixelSize + 1]]; // G
        destPixels[x * PixelSize + 2] = contrast_lookup[destPixels[x * PixelSize + 2]]; // R
        //destPixels[x * PixelSize + 3] = contrast_lookup[destPixels[x * PixelSize + 3]]; //A
    }
}

私の問題はこの行です:

byte* destPixels = (byte*)bitmapdata.Scan0 + (y * bitmapdata.Stride);
4

1 に答える 1

2

C# への単純な変換は次のとおりScan0です。IntPtr

IntPtr destPixels = Scan0 + y*stride;

ここにいるプレーヤーは次のとおりです。

  • Scan0: 最初のスキャンライン、つまりピクセル データの先頭へのポインタ。
  • y: 行番号。
  • stride: ピクセル行のバイト数。
  • destPixels: 行の先頭へのポインタy

ただし、これは、アンマネージ メモリをdestPixels. あなたがそうであるかどうかはわかりません。マネージ メモリを使用している場合、変換は異なります。さらにサポートが必要な場合は、マネージド バージョンで使用されている型についてお知らせください。

于 2012-04-28T13:25:08.420 に答える