计算尺寸以调整图像大小

时间:2013-01-01 15:12:14

标签: c# image-resizing dimensions

我正在创建一个图像缩放器方法,以使图像适合最大尺寸(最大宽度和最大高度)。我正在使用以下方法来计算目标尺寸。如果width大于max-width,我将宽度设置为max-width并计算height,然后使用这个简单的数学公式再次为高度执行此操作:

  

(宽度/高度)=(maxWidth / maxHeight)

但是,重新调整后的图像在调整大小时似乎没有正确的尺寸。我的方法是:

private static Size CalculateDimensions(Size currentSize, double maxWidth, double maxHeight) {            
    double width = currentSize.Width,
           height = currentSize.Height;
    if (width > maxWidth) {
        width = maxWidth;
        height = width * maxHeight / maxWidth;
    }
    if (height > maxHeight) {
        height = maxHeight;
        width = height * maxWidth / maxHeight;
    }
    return new Size(Convert.ToInt32(width), Convert.ToInt32(height));   
}
你能告诉我在哪里错了吗?为什么这不起作用?

3 个答案:

答案 0 :(得分:1)

请勿使用maxWidthmaxHeight的比率,而应使用原始widthheight的比率。

您当前正在计算的是最大尺寸图像的纵横比,它与原始图像的纵横比不变且不同。

您需要以下代码:

if (width > maxWidth)
{
    double ratio = height / width;
    width = maxWidth;
    height = width * ratio;
}
if (height > maxHeight)
{
    double ratio = width / height;
    height = maxHeight;
    width = height * ratio;
}

您可以对代码进行其他优化。

答案 1 :(得分:0)

检查您的最大高度和最大宽度是否始终与图像尺寸成比例。 因为您的公式正常工作,所以当前大小必须与最大大小成比例。

答案 2 :(得分:0)

private static Size CalculateDimensions(Size currentSize, double maxWidth, double maxHeight) {
    var sourceWidth = (double)currentSize.Width;
    var sourceHeight = (double)currentSize.Height;

    var widthPercent = maxWidth / sourceWidth;
    var heightPercent = maxHeight / sourceHeight;

    var percent = heightPercent < widthPercent
                   ? heightPercent
                   : widthPercent;

    var destWidth = (int)(sourceWidth * percent);
    var destHeight = (int)(sourceHeight * percent);

    return new Size(destWidth, destHeight);
}