RGB值存储在此数组中的哪个位置?

时间:2012-05-31 18:47:00

标签: vb.net arrays rgb lockbits

我一直在我的控件中使用以下子程序,我正在创建它以便让我更快地修改位图中的像素:

    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]

然而,这似乎不正常。

1 个答案:

答案 0 :(得分:1)

这取决于ime.PixelFormat的值。每个像素可以表示为RGB,ARGB,调色板查找索引等。

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

另外,您需要注意字节顺序。字节可能是小端字节顺序,但它取决于您的目标平台。

对于Format32bppArgb,这可能会对格式有所了解:

PixelFormat.Format32bppArgb seems to have wrong byte order