2012-04-28 34 views
-1

我试图把这种代码使用Marshal.copy到VB.NET,但我不能让它工作对比算法C#指针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); 
+0

类似的问题,http://stackoverflow.com/questions/13174323/contrast-of-an-image-in-vb2005/ – Kratz 2012-11-03 23:28:58

回答

2

假设你有Scan0作为IntPtr那么幼稚翻译到C#很简单:

IntPtr destPixels = Scan0 + y*stride; 

这里的球员是:

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

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