我正在尝试编写一个将BitmapSource转换为BitmapImage的函数。我找到这样做的唯一方法是创建一个临时bmp文件,从该文件中写入和读取以创建一个新的BitmapImage。在尝试删除该文件或重新使用该函数之前,此操作很好。在释放BitmapImage之前,存在一些文件处理错误,在这些错误中文件仍将被使用。
1-是否有更好的方法将BitmapSource转换为BitmapImages?
2-在不释放BitmapImage的情况下,我能做些什么来返回它?
public BitmapImage ConvertSourceToBitMapImage(BitmapSource bitmapSource)
{
BitmapImage bmi = null;
try
{
string filePath = @"C:\GitRepository\ReceiptAPP\ReceiptApplication\bin\Debug\testing.bmp";
using (var fileStream = new FileStream(filePath, FileMode.Create))
{
BitmapEncoder encoder = new BmpBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
encoder.Save(fileStream);
fileStream.Close();
}
Uri path = new Uri(filePath);
bmi = new BitmapImage(path);
File.Delete(filePath);
}
catch(Exception ex)
{
}
return bmi;
}
发布于 2021-11-29 06:26:01
与文件相比,MemoryStream的编码和解码效率要高得多。
但是,请注意,没有将BitmapSource转换为BitmapImage的用例。BitmapSource可以直接用作图像元素的Source
或ImageBrush的ImageSource
。从不显式地需要一个BitmapImage。
public static BitmapImage ConvertBitmapSourceToBitmapImage(
BitmapSource bitmapSource)
{
// before encoding/decoding, check if bitmapSource is already a BitmapImage
if (!(bitmapSource is BitmapImage bitmapImage))
{
bitmapImage = new BitmapImage();
BmpBitmapEncoder encoder = new BmpBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
using (MemoryStream memoryStream = new MemoryStream())
{
encoder.Save(memoryStream);
memoryStream.Position = 0;
bitmapImage.BeginInit();
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.StreamSource = memoryStream;
bitmapImage.EndInit();
}
}
return bitmapImage;
}
https://stackoverflow.com/questions/70156160
复制相似问题