计算调整图像大小的尺寸

3
我正在创建一个图片缩放的方法,以适应最大尺寸(max-width和max-height)。我使用以下方法来计算目标尺寸。如果宽度大于 max-width, 我将宽度设置为 max-width,然后计算高度,接着再对高度进行同样的操作。使用这个简单的数学公式:

(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));   
}

你能告诉我哪里错了吗?为什么这个不起作用?


你真的想要进行乘法运算吗?你能否使用一些适当的数字值并计算出结果呢? - bonCodigo
3个回答

3
不要使用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
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);
}

0

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


就像ChrisF所说的那样,尝试使用图像的比例。那会起作用的。 - GautamJeyaraman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接