计算尺寸以调整图像的大小

本文关键字:图像 调整 计算尺 | 更新日期: 2023-09-27 17:50:12

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

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

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

计算尺寸以调整图像的大小

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

你可能还可以对代码进行其他优化。

检查max-height和max-width是否总是与图像尺寸成比例。因为要使公式正常工作,always current size必须与max size成比例

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