我一直在我的控件中使用以下子程序,我正在创建它以便让我更快地修改位图中的像素:
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
,但每个指标代表什么?起初我以为它设置如下:
的阵列 - > [像素0,0的R] [像素0,0的G] [像素0,0的B] [像素2,0的R] [像素2,0的G] [像素2,0的B] 的
然而,这似乎不正常。
答案 0 :(得分:1)
这取决于ime.PixelFormat的值。每个像素可以表示为RGB,ARGB,调色板查找索引等。
http://msdn.microsoft.com/en-us/library/system.drawing.imaging.pixelformat.aspx
另外,您需要注意字节顺序。字节可能是小端字节顺序,但它取决于您的目标平台。
对于Format32bppArgb,这可能会对格式有所了解: