JMK*_*JMK 7 wpf bitmapimage writeablebitmap
如何在WPF中将WriteableBitmap对象转换为对象BitmapImage?
这个链接涵盖了silverlight,WPF中的进程不一样,WriteableBitmap对象没有SaveJpeg方法.
所以我的问题是如何在WPF中将WriteableBitmap对象转换为对象BitmapImage?
sa_*_*213 13
您可以使用其中一个BitmapEncoders将WriteableBitmap帧保存为新帧BitmapImage
在这个例子中,我们将使用PngBitmapEncoder但只选择适合您情况的那个.
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;
}
Run Code Online (Sandbox Code Playgroud)
用法:
BitmapImage bitmap = ConvertWriteableBitmapToBitmapImage(your writable bitmap);
Run Code Online (Sandbox Code Playgroud)
或者你可以使这个扩展方法易于使用
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;
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
WriteableBitmap wbm = // your writeable bitmap
BitmapImage bitmap = wbm.ToBitmapImage();
Run Code Online (Sandbox Code Playgroud)