C# 计算尺寸以调整图像大小
我正在创建一个图像大小调整方法,使图像适合最大大小(最大宽度和最大高度)。我使用下面的方法来计算目标尺寸。如果“宽度”大于“最大宽度”,我将“宽度”设置为“最大宽度”并计算高度,然后使用以下简单的数学公式对“高度”再次执行此操作: (宽度/高度)=(最大宽度/最大高度) 但是,调整大小后的图像在调整大小时似乎并没有正确的尺寸。我的方法是:C# 计算尺寸以调整图像大小,c#,image-resizing,dimensions,C#,Image Resizing,Dimensions,我正在创建一个图像大小调整方法,使图像适合最大大小(最大宽度和最大高度)。我使用下面的方法来计算目标尺寸。如果“宽度”大于“最大宽度”,我将“宽度”设置为“最大宽度”并计算高度,然后使用以下简单的数学公式对“高度”再次执行此操作: (宽度/高度)=(最大宽度/最大高度) 但是,调整大小后的图像在调整大小时似乎并没有正确的尺寸。我的方法是: private static Size CalculateDimensions(Size currentSize, double maxWidth, doub
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));
}
你能告诉我哪里错了吗?为什么这不起作用?检查您的最大高度和最大宽度是否始终与图像尺寸成比例。 因为要使公式正常工作,当前大小必须始终与最大大小成比例。
专用静态大小计算尺寸(大小currentSize、double maxWidth、double maxHeight){
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);
}
var sourceWidth=(双精度)currentSize.Width;
var sourceHeight=(双精度)currentSize.Height;
var widthPercent=最大宽度/源宽度;
var heightPercent=最大高度/源高度;
变量百分比=高度百分比<宽度百分比
?高度百分比
:百分比;
变量destWidth=(int)(sourceWidth*百分比);
变量destHeight=(int)(源高度*百分比);
返回新大小(destWidth、destWidth);
}
不要使用maxWidth
和maxHeight
的比率,而是使用原始width
和height
的比率
您当前正在计算的是最大尺寸图像的纵横比,它将是一个常数,与原始图像的纵横比不同
您需要类似以下代码的代码:
if (width > maxWidth)
{
double ratio = height / width;
width = maxWidth;
height = width * ratio;
}
if (height > maxHeight)
{
double ratio = width / height;
height = maxHeight;
width = height * ratio;
}
您可能还可以对代码进行其他优化。您真的打算倍增吗?你能应用一些正确的数值并计算结果吗?你可以像克里斯夫说的那样尝试使用图像的比率。那就行了。