gpt4 book ai didi

c# - Image.Save 崩溃 : {"Value cannot be null.\r\nParameter name: encoder"}

转载 作者:可可西里 更新时间:2023-11-01 07:44:22 28 4
gpt4 key购买 nike

我正在尝试将图像保存到 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 的这一部分有关:

If the Image contains an embedded thumbnail image, this method retrieves the embedded thumbnail and scales it to the requested size. If the Image does not contain an embedded thumbnail image, this method creates a thumbnail image by scaling the main image.

这可能是间歇性行为(也称为“某些条件”)的原因。解释在下面Microsoft Connect ticket :

The underlying API is not able to locate an encoder for the MemoryBmp image type. We will need to investigate this will the GDI+ team. In the meantime, you should be able to simply change your ImageFormat to ImageFormat.Bmp rather than ImageFormat.MemoryBmp and it should work. It will still be saved to the MemoryStream using the BMP format.

很有可能,如果没有嵌入缩略图,GetThumbnailImage API 生成的新缩略图实际上将具有 RawFormatMemoryBmp 没有关联的编码器 - 因此是您看到的特定错误消息。

只是不要使用thumb.RawFormat;因为您知道它无论如何都是位图,所以请改用 ImageFormat.Bmp

附言请注意,虽然我删除了我之前的回答,因为它与这个特定问题无关,但按照文档的说明正确使用 GetThumbnailImage API 仍然很重要;您必须callback 参数传递一个有效委托(delegate)而不是null,否则它可能会失败,并且您仍然需要在using 子句。

关于c# - Image.Save 崩溃 : {"Value cannot be null.\r\nParameter name: encoder"},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9073619/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com