【发布时间】:2015-03-30 07:45:16
【问题描述】:
以下 C# 3.5 代码在 GetThumbnailImage 中引发异常:
Image img = null;
Image scaledImg = null;
byte[] imageData = File.ReadAllBytes("11001.jpg");
MemoryStream stream = new MemoryStream(imageData);
img = Image.FromStream(stream);
stream.Close();
stream.Dispose();
scaledImg = img.GetThumbnailImage(64, 64, null, IntPtr.Zero);
问题在于流的处理。如果我删除 Close() 和 Dispose() 语句,一切正常。有谁知道为什么会抛出这个异常?使用回调而不是 null 作为参数不会改变行为。
我不需要解决方案,我可以使用 new Bitmap(img, new Size(width, height) 进行缩放。这可能更好,应该从一开始就使用。
编辑:对不起,我忘了提到这个异常只发生在 WindowsXP 中。 Win7 和 Win8 似乎可以很好地处理上面的代码。
【问题讨论】:
-
只调用一次 => Dispose auto 关闭并释放句柄。
-
或者直接使用
using。 -
我假设你没有使用
Image.FromFile,因为真正的代码有点复杂,对吧? -
真正的代码使用资源,而不是文件。并且图像的加载和调整大小在不同的部分,因此在调整大小后延迟处置是不可能的。