0

我只是在做一个简单的工作:将位图转换为数组,然后使用该数组,使用 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

任何有关这方面的帮助将不胜感激,谢谢。

4

1 回答 1

1

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

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

此外,您在这里使用 BGR32(4 字节像素),因此您很安全,但其他像素格式的步幅可能需要向上舍入到下一个 4 字节边界。

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

于 2012-08-30T19:57:14.633 回答