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) {}1 バイトの割り当てが少なすぎます。

例として、1 ピクセルあたり 4 バイトの 4x4 ピクセル イメージは、4*4*4-1=63 バイトを割り当てますが、64 バイトが必要です。

また、ここでは BGR32 (4 バイト ピクセル) を使用しているので安全ですが、他のピクセル形式ではストライドを次の 4 バイト境界に切り上げる必要がある場合があります。

BitmapSource.Create はstride、 ではなく、最後のパラメーターとしても受け取りますwidth

于 2012-08-30T19:57:14.633 に答える