将 System.Drawing.Image 转换为 System.Windows.Media.ImageSource 没有结果
Converting System.Drawing.Image to System.Windows.Media.ImageSource with no result
我想在我的 WPF 应用程序中将 Image 转换为 ImageSource。我使用正常工作的 Code128 库(已在 WinForms 应用程序中检查过)。 returns 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;
}
}
更新:
最好的方法是克莱门斯在下面评论的一种方法。比使用 memorystream 快大约 4 倍。
您必须设置 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;
}
我想在我的 WPF 应用程序中将 Image 转换为 ImageSource。我使用正常工作的 Code128 库(已在 WinForms 应用程序中检查过)。 returns 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;
}
}
更新: 最好的方法是克莱门斯在下面评论的一种方法。比使用 memorystream 快大约 4 倍。
您必须设置 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;
}