我正在尝试将图像保存到MemoryStream
中,但是在某些情况下会失败。
这是代码:
以下代码成功:
Image img = Bitmap.FromStream(fileStream);
MemoryStream ms = new MemoryStream();
img.Save(ms, img.RawFormat); // This succeeds.
以下代码失败:
Image img = Bitmap.FromStream(fileStream);
Image thumb = img.GetThumbnailImage(thumbWidth, thumbHeight, null, System.IntPtr.Zero);
MemoryStream ms = new MemoryStream();
thumb.Save(ms, thumb.RawFormat); // This fails.
请注意,第二个片段使用的图像是使用
Image.GetThumbnailImage
创建的。有什么不同?有谁知道它为什么会失败?
最佳答案
我相信问题与 GetThumbnailImage
documentation的这一部分有关:
这可能解释了间歇性行为(也称为“某些条件”)。解释在下面的Microsoft Connect ticket中:
极有可能,如果没有嵌入的缩略图,则GetThumbnailImage
API生成的新缩略图实际上将具有RawFormat
的MemoryBmp
,但没有关联的编码器-因此,您将看到特定的错误消息。
只是不要使用thumb.RawFormat
;由于您仍然知道它是位图,因此请改为使用ImageFormat.Bmp
。
附言请注意,尽管我删除了先前的答案是因为事实证明该答案与该特定问题无关,但按照文档中的说明正确使用GetThumbnailImage
API仍然很重要。您必须为callback
参数而不是null
传递有效的委托(delegate),否则它可能会失败,并且您仍然需要将一次性用品包装在using
子句中。