2016-10-10 10 views
0

私はBrad Barnhill(http://www.codeproject.com/Articles/20823/Barcode-Image-Generation-Library)のBarcode Image Generation Libaryを使用してバーコードイメージを作成しています。イメージはWpf Image Controlに表示されません

この記事では、Windowsフォームですべての方法を説明しています。しかし、今は - Wpfを使用して - いくつかのエラーがあります。例:Encodeの機能はSystem.Drawing.Imageを返しますが、Wpf Image Controlにこの画像を表示する場合は、SourceプロパティはSystem.Windows.Media.ImageSourceが必要です。

Drawing.ImageMedia.ImageSourceに変換する方法をいくつか再調査しました。スニペットをいくつか見つけましたが、期待通りに動作しません。

現在、私はこのコードを使用する:画像を変換(画像制御に割り当てる)、このコードを実行するとき

// Import: 
using Media = System.Windows.Media; 
using Forms = System.Windows.Forms; 


// Setting some porperties of the barcode-object 
this.barcode.RotateFlipType = this.bcvm.Rotation.Rotation; 
this.barcode.Alignment = this.bcvm.Ausrichtung.Alignment; 
this.barcode.LabelPosition = this.bcvm.Position.Position; 

// this.bcvm is my BarcodeViewModel for MVVM 
var img = this.barcode.Encode(
    this.bcvm.Encoding.Encoding, 
    this.bcvm.EingabeWert, 
    this.bcvm.ForeColor.ToDrawingColor(), 
    this.bcvm.BackColor.ToDrawingColor(), 
    (int)this.bcvm.Breite, 
    (int)this.bcvm.Hoehe 
); 

this.imgBarcode.Source = img.DrawingImageToWpfImage(); 

this.imgBarcode.Width = img.Width; 
this.imgBarcode.Height = img.Height; 

// My conversion methode. It takes a Drawing.Image and returns a Media.ImageSource 
public static Media.ImageSource ToImageSource(this Drawing.Image drawingImage) 
{ 
    Media.ImageSource imgSrc = new Media.Imaging.BitmapImage(); 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     drawingImage.Save(ms, Drawing.Imaging.ImageFormat.Png); 

     (imgSrc as Media.Imaging.BitmapImage).BeginInit(); 
     (imgSrc as Media.Imaging.BitmapImage).StreamSource = new MemoryStream(ms.ToArray()); 
     (imgSrc as Media.Imaging.BitmapImage).EndInit(); 
    } 
    return imgSrc; 
} 

何もないが、この変換方法は、動作するはず

答えて

1

を表示:

public static ImageSource ToImageSource(this System.Drawing.Image image) 
{ 
    var bitmap = new BitmapImage(); 

    using (var stream = new MemoryStream()) 
    { 
     image.Save(stream, System.Drawing.Imaging.ImageFormat.Png); 
     stream.Position = 0; 

     bitmap.BeginInit(); 
     bitmap.CacheOption = BitmapCacheOption.OnLoad; 
     bitmap.StreamSource = stream; 
     bitmap.EndInit(); 
    } 

    return bitmap; 
} 

System.Drawing.Imageが実際にはSystem.Drawing.Bitmapの場合は、次のように他の変換方法を使用することもできます。fast converting Bitmap to BitmapSource wpf

+0

ありがとうございました!あなたのコードを試した後、私はただ私のXAMLを台無しにしたことに気付きました。画像コントロールは外側のスタックパネル境界ミックスによってシャドーされていました。あなたのコードも同様に動作します:D – Radinator

関連する問題