我有一个C#函数来重新定义图像。函数的参数将是原始图像路径,新图像路径(保存图像大小后的路径)。 现在我想为以下要求构建逻辑。
1。如果原始文件的宽度大于480或小于450,那么我想将输出图像的宽度设置为450px。并且高度必须与宽度成比例。
我正在使用以下代码调整图像大小
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。 因此比率= 450/1094,即0.4113; 期望的高度=期望的宽度*比率ie; 450 * 0.4113,即185 .1
它的比例如何。我认为有些事情需要纠正。还有更多想法吗?
提前致谢
答案 0 :(得分:4)
您需要的是图像宽度和高度之间的简单比率。基本的算术。
float ratio = oldImg.Width / oldImg.Height;
SizeF newSize = new SizeF(desiredWidth, desiredWidth / ratio);
这样,新尺寸将与旧尺寸成比例。
修改了类型并澄清
我认为缺乏数学,所以在这里:
假设我们的图像 100(w)x 200(h),比率(w / h) 0.5 ,并希望将其调整为宽度 400 。我们简单地将所需的宽度除以比率,从而给出 800 ,正确答案。
现在,如果我们想要将相同的图片调整为 50 的宽度,将其除以比率,则会给我们 100 的高度。
由于我之前版本的答案出现了拼写错误,我使用的是*
而不是/
,这使我的回答错了。
答案 1 :(得分:0)
在您的示例中,您需要翻转分数。除以你的比例而不是乘以。这将给你原始的1094。