在WPF和C#中工作,我有一个TransformedBitmap对象,我要么:
不幸的是,在这一点上,我真的很难完成这两件事中的任何一件。
任何人都可以提供任何帮助或指出我可能遗失的任何方法吗?
答案 0 :(得分:4)
所有编码器都使用BitmapFrame
类来创建将添加到编码器的Frames
集合属性的帧。 BitmapFrame.Create
方法有多种重载,其中一种接受BitmapSource
类型的参数。因此,我们知道TransformedBitmap
继承自BitmapSource
,我们可以将其作为参数传递给BitmapFrame.Create
方法。以下是您所描述的方法:
public bool WriteTransformedBitmapToFile<T>(BitmapSource bitmapSource, string fileName) where T : BitmapEncoder, new()
{
if (string.IsNullOrEmpty(fileName) || bitmapSource == null)
return false;
//creating frame and putting it to Frames collection of selected encoder
var frame = BitmapFrame.Create(bitmapSource);
var encoder = new T();
encoder.Frames.Add(frame);
try
{
using (var fs = new FileStream(fileName, FileMode.Create))
{
encoder.Save(fs);
}
}
catch (Exception e)
{
return false;
}
return true;
}
private BitmapImage GetBitmapImage<T>(BitmapSource bitmapSource) where T : BitmapEncoder, new()
{
var frame = BitmapFrame.Create(bitmapSource);
var encoder = new T();
encoder.Frames.Add(frame);
var bitmapImage = new BitmapImage();
bool isCreated;
try
{
using (var ms = new MemoryStream())
{
encoder.Save(ms);
ms.Position = 0;
bitmapImage.BeginInit();
bitmapImage.StreamSource = ms;
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.EndInit();
isCreated = true;
}
}
catch
{
isCreated = false;
}
return isCreated ? bitmapImage : null;
}
他们接受任何BitmapSource作为第一个参数,并接受任何BitmapEncoder作为泛型类型参数。
希望这有帮助。