在WPF和C#的工作,我有一個TransformedBitmap對象,我可以:將TransformedBitmap對象保存到磁盤。
- 需要保存到磁盤作爲位圖文件類型(理想情況下,我會允許用戶選擇是否它保存爲BMP ,JPG,TIF等,但我還沒有到那個階段呢......)
- 需要轉換爲BitmapImage對象,因爲我知道如何從BitmapImage對象獲取byte []。
不幸的是,在這一點上,我非常努力地完成這兩件事中的任何一件。
任何人都可以提供任何幫助或指出我可能會失蹤的任何方法嗎?
在WPF和C#的工作,我有一個TransformedBitmap對象,我可以:將TransformedBitmap對象保存到磁盤。
不幸的是,在這一點上,我非常努力地完成這兩件事中的任何一件。
任何人都可以提供任何幫助或指出我可能會失蹤的任何方法嗎?
所有的編碼器都使用BitmapFrame
類來創建幀,這些幀將被添加到編碼器的Frames
集合屬性中。方法有多種過載方法,其中一種接受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);
bitmapImage.BeginInit();
bitmapImage.StreamSource = ms;
bitmapImage.EndInit();
isCreated = true;
}
}
catch
{
isCreated = false;
}
return isCreated ? bitmapImage : null;
}
他們接受任何的BitmapSource作爲第一個參數和任何的BitmapEncoder作爲泛型類型參數。
希望這會有所幫助。
哇,非常非常!我真的不知道不同的編碼器是如何工作的(或者如何應用它們)。萬分感謝! – JToland 2010-09-07 15:20:08
發佈鏈接並不是真正的答案,但我認爲這可能是一個好的開始。 http://msdn.microsoft.com/en-us/library/ms750864.aspx – Val 2010-09-07 13:54:34