-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

假设你有Scan0一个IntPtr那么天真的 C# 翻译就是:

IntPtr destPixels = Scan0 + y*stride;

这里的球员是:

  • Scan0:指向第一扫描线的指针,即像素数据的开始。
  • y: 行号。
  • stride: 一行像素中的字节数。
  • destPixels: 指向行首的指针y

但这将假设您将非托管内存用于destPixels. 我不知道你是不是。如果您使用的是托管内存,那么翻译会有所不同。如果您需要更多帮助,您需要告诉我们您的托管版本使用的类型。

于 2012-04-28T13:25:08.420 回答