在 C# 中调整图像宽度,但不调整高度

本文关键字:调整 高度 图像 | 更新日期: 2023-09-27 17:56:48

如何在 C# 中调整图像宽度而不使用 image.resize() 调整高度大小

当我这样做时:

image.Resize(width: 800, preserveAspectRatio: true,preventEnlarge:true);

这是完整的代码:

var imagePath = "";
var newFileName = "";
var imageThumbPath = "";
WebImage image = null;            
image = WebImage.GetImageFromRequest();
if (image != null)
{
    newFileName = Path.GetFileName(image.FileName);
    imagePath = @"pages/"+newFileName;
    image.Resize(width:800, preserveAspectRatio:true, preventEnlarge:true);
    image.Save(@"~/images/" + imagePath);
    imageThumbPath = @"pages/thumbnail/"+newFileName;
    image.Resize(width: 150, height:150, preserveAspectRatio:true, preventEnlarge:true);
    image.Save(@"~/images/" + imageThumbPath);
}

我收到此错误消息:

方法"调整大小"没有重载需要 3 个参数

在 C# 中调整图像宽度,但不调整高度

文档是垃圾,所以我偷看了源代码。 他们使用的逻辑是查看传递的高度和宽度值,并计算每个值的纵横比,将新值与当前值进行比较。 纵横比较大的值(高度或宽度)都会从另一个值计算其值。 以下是相关代码段:

double hRatio = (height * 100.0) / image.Height;
double wRatio = (width * 100.0) / image.Width;
if (hRatio > wRatio)
{
    height = (int)Math.Round((wRatio * image.Height) / 100);
}
else if (hRatio < wRatio)
{
    width = (int)Math.Round((hRatio * image.Width) / 100);
}

所以,这意味着,如果你不想自己计算高度值,只需传入一个非常大的高度值。

image.Resize(800, 100000, true, true);

这将导致hRatio大于 wRatio,然后根据width计算height

由于您已preventEnlarge设置为true,因此您可以直接传递image.Height

image.Resize(800, image.Height, true, true);

当然,自己计算height并不难:

int width = 800;
int height = (int)Math.Round(((width * 1.0) / image.Width) * image.Height);
image.Resize(width, height, false, true);
适用于

Winform的解决方案

<小时 />

使用此函数:

public static Image ScaleImage(Image image, int maxWidth)
{    
    var newImage = new Bitmap(newWidth, image.Height);
    Graphics.FromImage(newImage).DrawImage(image, 0, 0, newWidth, image.Height);
    return newImage;
}

用法:

Image resized_image = ScaleImage(image, 800);