1

byte[] を BitmapImage に変換し、WPF イメージ コントロールに表示する必要があります。(img.Source = ...)。

次のように変換すると:

m_photo = new BitmapImage();

using (MemoryStream stream = new MemoryStream(photo.ToArray()))
{
    m_photo.BeginInit();
    m_photo.StreamSource = stream;
    m_photo.EndInit();
}

「m_photo が別のストリームを所有している」ため、Source プロパティへの XAML バインディングを実行できません...どうすればよいですか?

4

2 に答える 2

1

begininit の後にキャッシュ オプションを OnLoad に設定します。

m_photo.CacheOption = BitmapCacheOption.OnLoad;

編集:画像ソースへの bmp 配列の完全なコード

                DrawingGroup dGroup = new DrawingGroup();
                using (DrawingContext drawingContext = dGroup.Open())
                {
                    var bmpImage = new BitmapImage();
                    bmpImage.BeginInit();
                    bmpImage.CacheOption = BitmapCacheOption.OnLoad;

                    bmpImage.StreamSource = new MemoryStream(photoArray);
                    bmpImage.EndInit();
                    drawingContext.DrawImage(bmpImage, new Rect(0, 0, bmpImage.PixelWidth, bmpImage.PixelHeight));
                    drawingContext.Close();
                }
                DrawingImage dImage = new DrawingImage(dGroup);
                if (dImage.CanFreeze)
                    dImage.Freeze();
                imageControl.Source = dImage;
于 2012-08-16T01:48:39.130 に答える
0

わかりました、解決策を見つけました。クラスのコードでこのコード (byte[] を bitmapSource に変換) を使用すると、オブジェクトが別のストリームにあるというエラーが発生します。ただし、コンバーター (IValueConverter) を作成し、それを XAML バインディングで変換する同じコードで使用すると、すべて問題ありません。

みんなありがとう!

于 2012-08-16T06:41:15.580 に答える