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倍高速です。
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;
}