我的方法在保持相同的宽高比的同时调整图像大小有什么不对?

时间:2017-04-14 04:09:25

标签: c# image

我的目标是在图像超过一定高度或宽度时调整图像大小,保持相同的宽高比。这是我到目前为止所得到的:

    static public Stream ScaleImage(HttpPostedFileBase imageFile)
    {
        Stream stream = new MemoryStream();
        var maxWidth = 500;
        var maxHeight = 500;
        var image = Image.FromStream(imageFile.InputStream, true, true);

        if (image.Width > maxWidth || image.Height > maxHeight)
        {
            // something in here is broken
            var ratioX = (double)maxWidth / image.Width;
            var ratioY = (double)maxHeight / image.Height;
            var ratio = Math.Min(ratioX, ratioY);

            var newWidth = (int)(image.Width * ratio);
            var newHeight = (int)(image.Height * ratio);

            var newImage = new Bitmap(image, newWidth, newHeight);
            Graphics.FromImage(newImage).DrawImage(image, 0, 0, newWidth, newHeight);
            Bitmap bmp = new Bitmap(newImage);

            bmp.Save(stream, ImageFormat.Jpeg);
            stream.Close();
        }
        else
        {
            // this works fine
            image.Save(stream, ImageFormat.Jpeg);
            stream.Close();
        }
        return stream;
    }

如果图像低于最大尺寸,则可以正常工作。但如果需要调整大小,那么由于某种原因我无法发现,返回的Stream充满了错误:

enter image description here

1 个答案:

答案 0 :(得分:1)

我用这个替换了代码的底部部分,它为我工作:

        bmp.Save(stream, ImageFormat.Jpeg);
    }
    else
    {
        image.Save(stream, ImageFormat.Jpeg);
    }
    stream.Seek(0, SeekOrigin.Begin);
    return stream;
}

关闭MemoryStream会导致您看到的Disposed错误。我不确定为什么第二种方法似乎能正常工作。

相关问题