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

时间:2017-02-02 09:10:14

标签: c# wpf image type-conversion imagesource

我想在我的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倍。

1 个答案:

答案 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;
}