【问题标题】:Calculate dimensions to resize an image计算尺寸以调整图像大小
【发布时间】:2012-12-16 04:48:43
【问题描述】:

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

(宽度/高度)=(最大宽度/最大高度)

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

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

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

【问题讨论】:

  • 你真的打算倍增吗?你能应用一些适当的数值并计算结果吗?

标签: c# image-resizing dimensions


【解决方案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;
}

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 你喜欢 ChrisF 说尝试使用图像的比例。那会奏效的。
    【解决方案3】:
    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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 2012-01-27
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      相关资源
      最近更新 更多