Sence PngBitmapEncoder
kullanmak ama sadece durumunuza uygun olanı seçecektir Bu örnekte yeni BitmapImage
için WriteableBitmap
çerçeveyi kaydetmek için BitmapEncoders
birini kullanabilirsiniz.
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;
}
kullanımı:
BitmapImage bitmap = ConvertWriteableBitmapToBitmapImage(your writable bitmap);
veya bu kolay kullanım için bir uzantısı yöntemi yapabiliriz
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;
}
}
kullanımı:
WriteableBitmap wbm = // your writeable bitmap
BitmapImage bitmap = wbm.ToBitmapImage();
bakınız [Bu cevap] (http: //stackoverflow.com/a/13988871/1136211) ve RenderTargetBitmap tarafından Wri'yi değiştirin teableBitmap. Bu dönüşüme neden tam olarak ihtiyacın var? BitmapImage ve WriteableBitmap bir resmin tüm ilgili özellikleri sağlayan ortak bir taban sınıfı BitmapSource var, çünkü genellikle gerekmez. – Clemens