无法访问已关闭的流异常

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() 来清理它。