将 System.Drawing.Image 转换为 System.Windows.Media.ImageSource 但没有结果

2024-05-13

我想在我的 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;
        }
    }

更新: 最好的方法是this https://stackoverflow.com/a/30729291/1136211。比使用 MemoryStream 快大约 4 倍。


你必须设置BitmapCacheOption.OnLoad确保 BitmapImage 立即加载EndInit()叫做。如果没有该标志,流必须保持打开状态,直到实际显示 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 System.Drawing.Image 转换为 System.Windows.Media.ImageSource 但没有结果 的相关文章

随机推荐