画像のサイズを変更するC#関数があります。関数のパラメーターは、元の画像パス、新しい画像パス(画像のサイズ変更を保存した後のパス)になります。今、私は以下の要件のロジックを構築したいと考えています。
1. 元のファイルの幅が 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 でした。望ましい高さ = 望ましい幅 * 比 ie ; 450*0.4113 (185 .1)
どのようにその比例。何か修正が必要だと思います。他に考えはありますか?
前もって感謝します