ASP.NET:按比例调整图像大小的逻辑

时间:2009-06-16 01:42:36

标签: c# logic

我有一个C#函数来重新定义图像。函数的参数将是原始图像路径,新图像路径(保存图像大小后的路径)。 现在我想为以下要求构建逻辑。

1。如果原始文件的宽度大于480或小于450,那么我想将输出图像的宽度设置为450px。并且高度必须与宽度成比例。

  1. 如果原始文件的宽度是>它的高度,然后在顶部和底部(到高度)添加空白区域,以便新的高度为650.
  2. 我正在使用以下代码调整图像大小

    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

    它的比例如何。我认为有些事情需要纠正。还有更多想法吗?

    提前致谢

2 个答案:

答案 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。