对比算法C#指向marshal.copy的指针

时间:2012-04-28 13:16:13

标签: c# vb.net bitmap contrast

我尝试使用Marshal.copy将此代码翻译为vb.net,但我无法让它工作

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);

1 个答案:

答案 0 :(得分:2)

假设您Scan0IntPtr,那么对C#的简单翻译就是:

IntPtr destPixels = Scan0 + y*stride;

这里的球员是:

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

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