如何确保通过 returns 图像的方法处理图像
How can I ensure an image is disposed of from method that returns an image
我有以下代码:
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
被处理掉。我在这里的方法感觉有些不对劲,但由于某种原因我无法发现它。
在这种情况下,调用代码要么正确处理一次性对象,要么将处理留给垃圾收集器。对此你绝对无能为力。您不能将图像包装在自己的包装器 class 中,因为同样的情况也适用——您的包装器 class 要么必须具有调用代码必须具有的 Dispose 方法(或类似方法)调用,and/or 你的包装器 class 将有一个垃圾收集器将调用的终结器。
您应该期望使用您的代码的开发人员是了解处置和垃圾收集的合格开发人员。
我有以下代码:
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
被处理掉。我在这里的方法感觉有些不对劲,但由于某种原因我无法发现它。
在这种情况下,调用代码要么正确处理一次性对象,要么将处理留给垃圾收集器。对此你绝对无能为力。您不能将图像包装在自己的包装器 class 中,因为同样的情况也适用——您的包装器 class 要么必须具有调用代码必须具有的 Dispose 方法(或类似方法)调用,and/or 你的包装器 class 将有一个垃圾收集器将调用的终结器。
您应该期望使用您的代码的开发人员是了解处置和垃圾收集的合格开发人员。