我试图"复制"来自另一个图像的图像,减小它的高度和宽度,并将其作为流返回以在另一个类中检索并显示为图像。但是当我在另一个类中获取流时,抛出异常; "无法访问封闭的流"。
此方法获取图像路径,缩小其大小并以流形式返回。
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;
});
}
答案 0 :(得分:2)
您正在处置MemoryStream
,因为您正在使用using
阻止。当您稍后尝试在代码中使用返回值时,它将无法使用。
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()
。 / p>