0

画像のサイズを変更するC#関数があります。関数のパラメーターは、元の画像パス、新しい画像パス(画像のサイズ変更を保存した後のパス)になります。今、私は以下の要件のロジックを構築したいと考えています。

1. 元のファイルの幅が 480 より大きいか 450 より小さい場合、出力画像の幅を 450px に設定し、高さは幅に比例する必要があります。

  1. 元のファイルの幅が高さよりも大きい場合は、新しい高さが 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 でした。望ましい高さ = 望ましい幅 * 比 ie ; 450*0.4113 (185 .1)

どのようにその比例。何か修正が必要だと思います。他に考えはありますか?

前もって感謝します

4

2 に答える 2

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になります。

以前のバージョンの回答でタイプミスがあったため、 の*代わりにを使用した/ため、回答が間違っていました。

于 2009-06-16T02:17:02.993 に答える
0

あなたの例では、分数を反転する必要があります。掛ける代わりに比率で割ります。これにより、元の 1094 が得られます。

于 2009-06-17T01:42:23.977 に答える