C# ASP.NET:按比例调整图像大小的逻辑
我有一个C#函数来调整图像大小。该函数的参数是原始图像路径,新图像路径(保存图像大小调整后的路径)。 现在我想为下面的需求构建一个逻辑 一,。如果原始文件的宽度大于480或小于450,那么我想将输出图像的宽度设置为450px,并且高度必须与宽度成比例C# ASP.NET:按比例调整图像大小的逻辑,c#,logic,C#,Logic,我有一个C#函数来调整图像大小。该函数的参数是原始图像路径,新图像路径(保存图像大小调整后的路径)。 现在我想为下面的需求构建一个逻辑 一,。如果原始文件的宽度大于480或小于450,那么我想将输出图像的宽度设置为450px,并且高度必须与宽度成比例 如果原始文件的宽度>其高度,则在顶部和底部(高度)添加空白,以便新高度为650 我正在使用下面的代码来调整图像的大小 try { Size oldSize=new Size(); Bitmap oldbmp1
try
{
Size oldSize=new Size();
Bitmap oldbmp1 = (Bitmap) Bitmap.FromFile(originalpath);
oldSize.Width=oldbmp1.Width;
oldSize.Height=oldbmp1.Height;
Size newSize=new Size()
using (Bitmap newbmp = new Bitmap(newsize.Width, newsize.Height), oldbmp = Bitmap.FromFile(originalpath) as Bitmap)
{
Graphics newgraphics = Graphics.FromImage(newbmp);
newgraphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
// newsize = GetNewImageSize(oldSize); // here i want the new Size
newgraphics.Clear(Color.FromArgb(-1));
newgraphics.FillRectangle(Brushes.White, 0, 0, newsize.Width, newsize.Height);
newgraphics.DrawImage(oldbmp, 0, 0, newsize.Width, newsize.Height);
try
{
// newgraphics.Save();
ImageCodecInfo[] Info = ImageCodecInfo.GetImageEncoders();
EncoderParameters Params = new EncoderParameters(1);
Params.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
newbmp.Save(newpath, Info[1], Params);
}
catch (Exception ex1)
{
throw ex1;
}
finally
{
newbmp.Dispose();
oldbmp.Dispose();
oldbmp1.Dispose();
}
}
}
catch (Exception ee)
{
throw ee;
}
有谁能告诉我还有什么要补充的吗
编辑(因为注释字段不允许我有更多字符)
我试过这个
float ratio = oldImg.Width / oldImg.Height;
SizeF newSize = new SizeF(desiredWidth, desiredWidth * ratio);
但它不会像我希望的那样起作用
我的原始图像宽度为450,高度为1094。
So比值=450/1094,为0.4113;
所需高度=所需宽度*比率ie;450*0.4113等于185.1
它是如何成比例的。我想有些事情必须纠正。还有什么想法吗
提前感谢您需要的是图像宽度和高度之间的简单比率。基本算术
float ratio = oldImg.Width / oldImg.Height;
SizeF newSize = new SizeF(desiredWidth, desiredWidth / ratio);
这样,新尺寸将与旧尺寸成比例
编辑以更正类型并澄清
我认为这是一个缺乏数学的问题,所以这里是这样的:
假设我们有一个图像100(宽)x200(高),其比率(宽/高)为0.5,并希望将其调整为400的宽度。我们只需将所需的宽度除以比率,就得到了正确的答案
现在,如果我们想将同一个图像的宽度调整为50,将其除以比率,将得到高度100
因为我以前版本的答案有一个打字错误,我用了
*
而不是/
,这使得我的答案错了。你需要的是图像宽度和高度之间的简单比率。基本算术
float ratio = oldImg.Width / oldImg.Height;
SizeF newSize = new SizeF(desiredWidth, desiredWidth / ratio);
这样,新尺寸将与旧尺寸成比例
编辑以更正类型并澄清
我认为这是一个缺乏数学的问题,所以这里是这样的:
假设我们有一个图像100(宽)x200(高),其比率(宽/高)为0.5,并希望将其调整为400的宽度。我们只需将所需的宽度除以比率,就得到了正确的答案
现在,如果我们想将同一个图像的宽度调整为50,将其除以比率,将得到高度100
因为我以前版本的答案有一个打字错误,我用了
*
而不是/
,这使得我的答案错了。在你的例子中,你需要翻转分数。除以你的比率,而不是乘。这将为您提供原始的1094。在您的示例中,您需要翻转分数。除以你的比率,而不是乘。那会给你原来的1094