我有一个调整位图大小的函数。这是一个“面包和黄油”操作,我只是从另一个项目中复制了它:
private Bitmap ResizeBitmap(Bitmap orig)
{
Bitmap resized = new Bitmap(this.Xsize, this.Ysize, PixelFormat.Format16bppGrayScale);
resized.SetResolution(orig.HorizontalResolution, orig.VerticalResolution);
using (Graphics g = Graphics.FromImage(resized))
{
g.DrawImage(orig, 0, 0, resized.Width, resized.Height);
}
return resized;
}
但是,我不断收到 OutOfMemory 异常Graphics g = Graphics.FromImage(resized)
。
我知道,当涉及到 GDI 时,OutOfMemory 异常通常会掩盖其他问题。我也很清楚,我要调整大小的图像并不大,而且(据我所知)GC 在收集实例时应该没有问题,因为它们离开了当前范围。
无论如何,我已经玩了一段时间了,它目前看起来像这样:
private Bitmap ResizeBitmap(Bitmap orig)
{
lock(orig)
{
using (Bitmap resized = new Bitmap(this.Xsize, this.Ysize, PixelFormat.Format16bppGrayScale))
{
resized.SetResolution(orig.HorizontalResolution, orig.VerticalResolution);
using (Graphics g = Graphics.FromImage(resized))
{
g.DrawImage(orig, 0, 0, resized.Width, resized.Height);
}
return resized;
}
}
}
但现在我得到了一个 InvalidOperation 异常resized.SetResolution(orig.HorizontalResolution, orig.VerticalResolution);
我厌倦了在黑暗中闲逛。有没有更好的方法来解决这些讨厌的 GDI 操作?