我尝试使用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);
答案 0 :(得分:2)
假设您Scan0
为IntPtr
,那么对C#的简单翻译就是:
IntPtr destPixels = Scan0 + y*stride;
这里的球员是:
Scan0
:指向第一条扫描线的指针,即像素数据的开头。y
:行号。stride
:一行像素中的字节数。destPixels
:指向行y
开头的指针。但这可能是假设您使用destPixels
的非托管内存。我不知道你是不是。如果您使用的是托管内存,则翻译会有所不同。如果您需要更多帮助,您需要告诉我们您的托管版本使用的类型。