我只是做一个简单的工作:将位图转换为数组,然后使用该数组,使用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
对此表示感谢,谢谢。
答案 0 :(得分:1)
Dim pixelBuffer = New Byte(height * stride - 1) {}
分配的字节太少了。
例如,每像素4字节的4x4像素图像将分配4 * 4 * 4-1 = 63字节,但需要64字节。
此外,你在这里使用BGR32(4字节像素),所以你是安全的,但其他像素格式的步幅可能需要四舍五入到下一个4字节边界。
BitmapSource.Create也将stride
作为最后一个参数,而不是width
。