我想在我的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;
}
}
更新: 最好的方法是下面的Clemens评论的方法。比使用memorystream快4倍。
答案 0 :(得分:8)
您必须设置BitmapCacheOption.OnLoad
以确保在调用EndInit()
时立即加载BitmapImage。如果没有该标志,则必须保持流开放,直到实际显示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;
}