Bpg32格式的CopyPixels方法

时间:2012-08-30 19:47:29

标签: bitmapsource getpixel

我只是做一个简单的工作:将位图转换为数组,然后使用该数组,使用BitmapSource.Create方法重新创建位图。

然而,我收到错误:“价值不在预期范围内”。这是我的代码。

        Dim width As Integer = bitmapImage.PixelWidth
        Dim height As Integer = bitmapImage.PixelHeight
        Dim bytesPerPixel As Integer = bitmapImage.Format.BitsPerPixel / 8
        Dim stride As Integer = width * bytesPerPixel

        Dim pixelBuffer = New Byte(height * stride - 1) {}
        bitmapImage.CopyPixels(pixelBuffer, stride, 0)

        Dim bmpSource As BitmapSource = BitmapSource.Create(width, height, 96, 96, PixelFormats.Bgr32, Nothing, pixelBuffer, width)
        Image2.Source = bmpSource

对此表示感谢,谢谢。

1 个答案:

答案 0 :(得分:1)

Dim pixelBuffer = New Byte(height * stride - 1) {}分配的字节太少了。

例如,每像素4字节的4x4像素图像将分配4 * 4 * 4-1 = 63字节,但需要64字节。

此外,你在这里使用BGR32(4字节像素),所以你是安全的,但其他像素格式的步幅可能需要四舍五入到下一个4字节边界。

BitmapSource.Create也将stride作为最后一个参数,而不是width