2017-02-02 7 views
2

私のWPFアプリケーションでImageSourceにImageを変換したいと思います。私は適切に動作するCode128ライブラリを使用しています(既にWinFormsアプリケーションでチェックされています)。以下の関数は、適切なサイズのImageSourceを返しますが、何も表示されません。結果にSystem.Drawing.ImageをSystem.Windows.Media.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; 
     } 
    } 

UPDATE: 最善の方法は、以下のクレメンスによるコメントです。 memorystreamを使用するより約4倍高速です。

答えて

2

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; 
} 
+0

もしあなたの 'Image'が実際にある' Bitmap'、あなたは変換のためのこの代替方法を使用することができます。http://stackoverflow.com/a/10077805/1136211 – Clemens

+0

も、この質問を参照してくださいます。http:// stackoverflow.com/q/94456/1136211 – Clemens

関連する問題