无法访问已关闭的流异常
Cannot access a closed stream Exception
我正在尝试 "copy" 从另一个图像中提取一个图像,减少它的高度和宽度,然后 return 它作为流在另一个 class 中检索并显示为图像.但是当我在另一个 class 中获取流时,会抛出异常; "cannot access to closed stream".
此方法获取图像路径,减小其大小并将 returns 作为流。
public Stream getImagenCopia (string dataImagen)
{
Bitmap ImageOrig = BitmapFactory.DecodeFile (dataImagen);
var ImagenCopia = Bitmap.CreateScaledBitmap (ImageOrig, 80, 80, false);
using (MemoryStream ms = new MemoryStream ())
{
ImagenCopia.Compress (Bitmap.CompressFormat.Jpeg, 40, ms);
return ms;
}
}
此方法接收流并在图像源中设置它
var cim = auxFotos.getImagenCopia(path);
setImagen(img, cim);
void setImagen (Image img, Stream strm)
{
img.Source = ImageSource.FromStream (() =>
{
return strm;
});
}
你正在处理 MemoryStream
因为你正在使用 using
块。当您稍后尝试在代码中使用 return 值时,它已不可用。
using (MemoryStream ms = new MemoryStream ())
{
ImagenCopia.Compress (Bitmap.CompressFormat.Jpeg, 40, ms);
return ms;
}
删除 using
语句:
Bitmap ImageOrig = BitmapFactory.DecodeFile(dataImagen);
var ImagenCopia = Bitmap.CreateScaledBitmap(ImageOrig, 80, 80, false);
var ms = new MemoryStream());
ImagenCopia.Compress(Bitmap.CompressFormat.Jpeg, 40, ms);
return ms;
如果您发现内存消耗激增是因为资源没有被垃圾回收,您可能必须在使用完它后手动清理它,也许可以通过调用 .Dispose()
来清理它。
我正在尝试 "copy" 从另一个图像中提取一个图像,减少它的高度和宽度,然后 return 它作为流在另一个 class 中检索并显示为图像.但是当我在另一个 class 中获取流时,会抛出异常; "cannot access to closed stream".
此方法获取图像路径,减小其大小并将 returns 作为流。
public Stream getImagenCopia (string dataImagen)
{
Bitmap ImageOrig = BitmapFactory.DecodeFile (dataImagen);
var ImagenCopia = Bitmap.CreateScaledBitmap (ImageOrig, 80, 80, false);
using (MemoryStream ms = new MemoryStream ())
{
ImagenCopia.Compress (Bitmap.CompressFormat.Jpeg, 40, ms);
return ms;
}
}
此方法接收流并在图像源中设置它
var cim = auxFotos.getImagenCopia(path);
setImagen(img, cim);
void setImagen (Image img, Stream strm)
{
img.Source = ImageSource.FromStream (() =>
{
return strm;
});
}
你正在处理 MemoryStream
因为你正在使用 using
块。当您稍后尝试在代码中使用 return 值时,它已不可用。
using (MemoryStream ms = new MemoryStream ())
{
ImagenCopia.Compress (Bitmap.CompressFormat.Jpeg, 40, ms);
return ms;
}
删除 using
语句:
Bitmap ImageOrig = BitmapFactory.DecodeFile(dataImagen);
var ImagenCopia = Bitmap.CreateScaledBitmap(ImageOrig, 80, 80, false);
var ms = new MemoryStream());
ImagenCopia.Compress(Bitmap.CompressFormat.Jpeg, 40, ms);
return ms;
如果您发现内存消耗激增是因为资源没有被垃圾回收,您可能必须在使用完它后手动清理它,也许可以通过调用 .Dispose()
来清理它。