目標パラメータ:
float width = 1024;
float height = 768;
var brush = new SolidBrush(Color.Black);
元のファイル:
var image = new Bitmap(file);
ターゲットサイズ(スケールファクタ):
float scale = Math.Min(width/image.Width, height/image.Height);
最初のブラッシングキャンバスを含むリサイズ:
var bmp = new Bitmap((int)width, (int)height);
var graph = Graphics.FromImage(bmp);
// uncomment for higher quality output
//graph.InterpolationMode = InterpolationMode.High;
//graph.CompositingQuality = CompositingQuality.HighQuality;
//graph.SmoothingMode = SmoothingMode.AntiAlias;
var scaleWidth = (int)(image.Width * scale);
var scaleHeight = (int)(image.Height * scale);
graph.FillRectangle(brush, new RectangleF(0, 0, width, height));
graph.DrawImage(image, new Rectangle(((int)width - scaleWidth)/2, ((int)height - scaleHeight)/2, scaleWidth, scaleHeight));
そして、結果ファイルを保存するためにbmp.Save(filename)
を実行することを忘れないでください。
他の次元を計算するために数学を行うだけの理由はありますか? –
@CodyGray "その他"の次元は正確に何ですか?アスペクト比を維持しながら縮小する必要がある2次元画像です。私はちょうどアスペクト比を取って、目標サイズに近い幅と高さの共通点を見つけようとしましたが、それは正しく機能しませんでした。 –