C# 调整大图像的大小会引发;“参数无效”;调用Image.FromStream()时

C# 调整大图像的大小会引发;“参数无效”;调用Image.FromStream()时,c#,system.drawing,C#,System.drawing,我正在尝试调整用户上传的大图像的大小,并将其缩小到缩略图大小 我有,因为它需要连续内存,但是 我使用的代码如下所示: public static byte[] GetThumbnailImage(Stream imageStream, ImageFormat format, int thumbnailWidth) { using (var thumbnailStream = new MemoryStream()) { imageStream.Position =

我正在尝试调整用户上传的大图像的大小,并将其缩小到缩略图大小

我有,因为它需要连续内存,但是

我使用的代码如下所示:

public static byte[] GetThumbnailImage(Stream imageStream, ImageFormat format, int thumbnailWidth)
{
    using (var thumbnailStream = new MemoryStream())
    {
        imageStream.Position = 0;
        using (var image = Image.FromStream(imageStream))
        {
            var thumbnailSize = GetThumbnailSize(image, thumbnailWidth);
            using (var thumbnail = image.GetThumbnailImage(
                    thumbnailSize.Width,
                    thumbnailSize.Height,
                    null,
                    IntPtr.Zero))
            {
                thumbnail.Save(thumbnailStream, format);
                return thumbnailStream.ToArray();
            }
        }
    }
}
var thumbnailBytes = ImageHelper.GetThumbnailImage(imageStream, ImageFormat.Jpeg, 150);
它的名字是这样的:

public static byte[] GetThumbnailImage(Stream imageStream, ImageFormat format, int thumbnailWidth)
{
    using (var thumbnailStream = new MemoryStream())
    {
        imageStream.Position = 0;
        using (var image = Image.FromStream(imageStream))
        {
            var thumbnailSize = GetThumbnailSize(image, thumbnailWidth);
            using (var thumbnail = image.GetThumbnailImage(
                    thumbnailSize.Width,
                    thumbnailSize.Height,
                    null,
                    IntPtr.Zero))
            {
                thumbnail.Save(thumbnailStream, format);
                return thumbnailStream.ToArray();
            }
        }
    }
}
var thumbnailBytes = ImageHelper.GetThumbnailImage(imageStream, ImageFormat.Jpeg, 150);
其他较小尺寸的图像使用此精确代码可以正常工作。有什么方法可以修改此代码以支持更大的图像吗


更新:根据@Hans Passant、@Matias Cicero和@Proputoix的建议添加了此项功能。我过去也遇到过类似的问题,我认为这是由图像大小造成的,图像大小等于0

我使用这个类的LoadImage方法解决了这个问题

您可以调整它以在此调用之前加载图像:var thumbnailSize=GetThumbnailSize(图像,thumbnailWidth)


你确定
imageStream
包含有效的图像吗?我刚下载了你链接的图像,可以调用
image。FromStream
刚刚好你调用Dispose()太草率了。就像您应该始终对缩略图和图像变量执行的操作一样,请确保使用using语句,以使其干净且异常安全。在处理/使用方面走捷径很容易,这可能会持续很长时间。但与Image和Bitmap类不同的是,它们可能需要大量非托管内存,这使得它们非常不可原谅。@HansPassant我看不出哪里遗漏了using语句。你能给我一个提示吗?
图像
缩略图
变量就是他所说的