1

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

    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但每个指数代表什么?一开始我以为是这样设置的:

Array-> [R of Pixel 0,0][G of Pixel 0,0][B of Pixel 0,0][R of Pixel 2,0][G of Pixel 2,0][B of Pixel 2,0 ]

然而,这似乎并不正确。

4

1 回答 1

1

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

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

此外,您需要注意字节顺序。字节可能是 little-endian 字节顺序,但这取决于您的目标平台。

对于 Format32bppArgb,这可能会对格式有所帮助:

PixelFormat.Format32bppArgb 似乎有错误的字节顺序

于 2012-05-31T19:01:13.070 回答