2012-04-28 54 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。我不知道你是否。如果您使用託管內存,則翻譯將有所不同。如果您需要更多幫助,則需要告訴我們您的託管版本使用的類型。