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

Jul*_*zuk 5 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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

更新:最好的方法是下面的Clemens评论的方法.比使用memorystream快约4倍.

Cle*_*ens 10

您必须设置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;
}
Run Code Online (Sandbox Code Playgroud)