JMK*_*JMK 9 c# memorystream using
我有以下方法,将a转换BitmapImage为System.Drawing.Bitmap:
public static Bitmap BitmapImageToBitmap(BitmapImage bitmapImage)
{
Bitmap bitmap;
using (var ms = new MemoryStream())
{
var encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmapImage));
encoder.Save(ms);
bitmap = new Bitmap(ms);
}
return bitmap;
}
Run Code Online (Sandbox Code Playgroud)
每当我尝试使用返回的Bitmap对象时,我都会收到以下错误:
发生OutOfMemoryException - 内存不足.
但是,每当我用这个替换代码时:
public static Bitmap BitmapImageToBitmap(BitmapImage bitmapImage)
{
var ms = new MemoryStream();
var encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmapImage));
encoder.Save(ms);
return new Bitmap(ms);
}
Run Code Online (Sandbox Code Playgroud)
这很好用.不过,我敢肯定,我应该用用作为MemoryStream对象实现IDisposable.这里发生了什么?
Tig*_*ran 11
Bitmap的构造函数Bitmap Constructor(Stream)声称
您必须在Bitmap的生命周期内保持流打开.
在您的情况下,当您使用using语句时,流(即Disposable)会自动处理,因此您的Bitmap对象将变为无效.这并不是说你分配了太多的内存,而是关于那个位图指向不再存在的东西.
| 归档时间: |
|
| 查看次数: |
2115 次 |
| 最近记录: |