web-dev-qa-db-ja.com

System.Drawing.ImageをSystem.Windows.Media.ImageSourceに変換しても結果はありません

WPFアプリでImageをImageSourceに変換したいと思います。正しく動作するCode128ライブラリを使用しています(WinFormsアプリですでにチェックされています)。以下の関数は、適切なサイズのImageSourceを返しますが、何も表示されません。

private ImageSource generateBarcode(string number)
    {
        var image = Code128Rendering.MakeBarcodeImage(number, 1, false);
        using (var ms = new MemoryStream())
        {
            var bitmapImage = new BitmapImage();
            image.Save(ms, ImageFormat.Bmp);
            bitmapImage.BeginInit();
            ms.Seek(0, SeekOrigin.Begin);
            bitmapImage.StreamSource = ms;
            bitmapImage.EndInit();
            return bitmapImage;
        }
    }

更新:最良の方法は、以下のクレメンスによってコメントされたものです。メモリストリームを使用するよりも約4倍高速です。

5

EndInit()が呼び出されたときにBitmapImageがすぐにロードされるようにするには、BitmapCacheOption.OnLoadを設定する必要があります。そのフラグがないと、BitmapImageが実際に表示されるまでストリームを開いたままにしておく必要があります。

using (var ms = new MemoryStream())
{
    image.Save(ms, ImageFormat.Bmp);
    ms.Seek(0, SeekOrigin.Begin);

    var bitmapImage = new BitmapImage();
    bitmapImage.BeginInit();
    bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
    bitmapImage.StreamSource = ms;
    bitmapImage.EndInit();

    return bitmapImage;
}
10
Clemens