如何确保从返回图像的方法中处理图像

时间:2015-08-07 16:54:54

标签: c# memory-management dispose system.drawing

我有以下代码:

private Image ResizeImage(Image image, int width, int height, bool paddOverflow)
{
    //Calculate sizes here. Removed for brevity

    var target = new Bitmap(image, finalWidth, finalHeight);
    using (var graphic = Graphics.FromImage(image))
    {
        graphic.Clear(Color.White);
        graphic.CompositingQuality = CompositingQuality.HighQuality;
        graphic.InterpolationMode = InterpolationMode.HighQualityBilinear;
        graphic.CompositingMode = CompositingMode.SourceCopy;
        graphic.DrawImage(target, 0, 0, finalWidth, finalHeight);

        return target;
    }
}

var image = ResizeImage(someImage, 100, 100, false);

我遇到的问题是,如果我将target包含在using语句中,那么image将无法生效。

我该如何做到这一点,但要确保image被处理掉。关于我的方法,我感觉很不舒服,但由于某些原因我无法发现它。

1 个答案:

答案 0 :(得分:2)

在这种情况下,由调用代码来正确处理您的一次性物品或以其他方式将处理留给垃圾收集器。你无能为力。你不能将图像包装在你自己的包装类中,因为同样的情况会适用 - 你的包装类要么必须有一个调用代码必须调用的Dispose方法(或类似的东西),和/或你的包装类会有一个垃圾收集器会调用的终结器。

您应该期望使用您的代码的开发人员是了解处理和垃圾收集的合格开发人员。