2012-05-31 85 views
1

我一直在用我的控制,我要創建讓我修改像素的位圖更快以下子:存儲在這個數組中的RGB值在哪裏?

Protected Sub LockForMemory() 
     idata = ime.LockBits(New Rectangle(0, 0, ime.Width, ime.Height), ImageLockMode.WriteOnly, ime.PixelFormat) 
     ipoint = idata.Scan0 

     ibytes = Math.Abs(idata.Stride) * ime.Height 
     ReDim irgbvalues(ibytes - 1) 
     System.Runtime.InteropServices.Marshal.Copy(ipoint, irgbvalues, 0, ibytes) 
    End Sub 

所有這一切工作,後來當我去檢索實際圖像操作後,它也可以正常工作。問題在於設置這些實際像素。

這是什麼數組?我知道它充滿了Integers,但每個指標代表什麼?起初,我認爲這是設置這樣的:

陣列 - > [R的像素0,0] [G像素0,0的] [像素0,0的B] [像素2,0的ř ] [像素2,0的G] [像素2,0的B]

然而,這看起來並不正確。

回答

1

它取決於ime.PixelFormat的值。

http://msdn.microsoft.com/en-us/library/system.drawing.imaging.pixelformat.aspx

另外,你必須要小心字節序的每個像素可以表示爲RGB,ARGB,調色板查找索引,等等。這些字節可能會以little-endian字節順序排列,但這取決於您的目標平臺。

對於Format32bppArgb,這可能會灑在格式一些輕:

PixelFormat.Format32bppArgb seems to have wrong byte order

+0

所以,看一下進去之後,我發現它是'Format32bppArgb'像素格式。有了這些信息,你能爲我詳細闡述一下這個問題嗎? – FreeSnow

+0

@XanderLamkins我更新了我的答案和更多信息。 –

+0

哦,好的。這是有道理的。謝謝您的幫助! +1和一張支票給你! – FreeSnow