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

C# ASP.NET:按比例调整图像大小的逻辑,c#,logic,C#,Logic,我有一个C#函数来调整图像大小。该函数的参数是原始图像路径,新图像路径(保存图像大小调整后的路径)。 现在我想为下面的需求构建一个逻辑 一,。如果原始文件的宽度大于480或小于450,那么我想将输出图像的宽度设置为450px,并且高度必须与宽度成比例 如果原始文件的宽度>其高度,则在顶部和底部(高度)添加空白,以便新高度为650 我正在使用下面的代码来调整图像的大小 try { Size oldSize=new Size(); Bitmap oldbmp1

我有一个C#函数来调整图像大小。该函数的参数是原始图像路径,新图像路径(保存图像大小调整后的路径)。 现在我想为下面的需求构建一个逻辑

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

  • 如果原始文件的宽度>其高度,则在顶部和底部(高度)添加空白,以便新高度为650
  • 我正在使用下面的代码来调整图像的大小

    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