How do I convert a WriteableBitmap object to a BitmapImage Object in WPF

后端 未结 1 1930
一向
一向 2020-12-07 02:14

How do I convert a WriteableBitmap object to a BitmapImage Object in WPF?

This link covers silverlight, the process is not the same in WPF

相关标签:
1条回答
  • 2020-12-07 03:08

    You can use one of the BitmapEncoders to save the WriteableBitmap frame to a new BitmapImage

    In this example we will use the PngBitmapEncoder but just choose the one that fits your situation.

    public BitmapImage ConvertWriteableBitmapToBitmapImage(WriteableBitmap wbm)
    {
        BitmapImage bmImage = new BitmapImage();
        using (MemoryStream stream = new MemoryStream())
        {
            PngBitmapEncoder encoder = new PngBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(wbm));
            encoder.Save(stream);
            bmImage.BeginInit();
            bmImage.CacheOption = BitmapCacheOption.OnLoad;
            bmImage.StreamSource = stream;
            bmImage.EndInit();
            bmImage.Freeze();
        }
        return bmImage;
    }
    

    usage:

     BitmapImage bitmap = ConvertWriteableBitmapToBitmapImage(your writable bitmap);
    

    or you could make this an extension method for easy use

    public static class ImageHelpers
    {
        public static BitmapImage ToBitmapImage(this WriteableBitmap wbm)
        {
            BitmapImage bmImage = new BitmapImage();
            using (MemoryStream stream = new MemoryStream())
            {
                PngBitmapEncoder encoder = new PngBitmapEncoder();
                encoder.Frames.Add(BitmapFrame.Create(wbm));
                encoder.Save(stream);
                bmImage.BeginInit();
                bmImage.CacheOption = BitmapCacheOption.OnLoad;
                bmImage.StreamSource = stream;
                bmImage.EndInit();
                bmImage.Freeze();
            }
            return bmImage;
        }
    }
    

    usage:

    WriteableBitmap wbm = // your writeable bitmap
    
    BitmapImage bitmap = wbm.ToBitmapImage();
    
    0 讨论(0)
提交回复
热议问题