我正在尝试将图像保存到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生成的新缩略图实际上将具有RawFormatMemoryBmp,但没有关联的编码器-因此,您将看到特定的错误消息。

只是不要使用thumb.RawFormat;由于您仍然知道它是位图,因此请改为使用ImageFormat.Bmp

附言请注意,尽管我删除了先前的答案是因为事实证明该答案与该特定问题无关,但按照文档中的说明正确使用GetThumbnailImage API仍然很重要。您必须callback参数而不是null传递有效的委托(delegate),否则它可能会失败,并且您仍然需要将一次性用品包装在using子句中。

07-26 04:58