对比算法 C# 指向 marshal.copy 的指针
本文关键字:copy 指针 marshal 指向 算法 | 更新日期: 2023-09-27 18:32:37
我试图使用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);
假设您Scan0
作为IntPtr
那么对 C# 的朴素翻译很简单:
IntPtr destPixels = Scan0 + y*stride;
这里的玩家是:
-
Scan0
:指向第一条扫描线的指针,即像素数据的开头。 -
y
:行号。 -
stride
:一行像素中的字节数。 -
destPixels
:指向第y
行开头的指针。
但这是在假设您使用非托管内存进行destPixels
的情况下进行的。我不知道你是不是。如果使用的是托管内存,则转换会有所不同。如果需要更多帮助,需要告诉我们托管版本使用的类型。