DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C#で非正方形画像を比率維持したまま正方形リサイズしたい

環境/言語:[c# VisualStudio Express 2012 .NET Framework 4または4.5]
分類:[.NET]

C#で画像ファイルをリサイズして再保存する方法はBitmapクラスを使うことは調べてわかったのですが、非正方形の画像を正方形サイズの画像に収める方法がわかりません。

例えば500x1000pxの元画像があった場合、200x200pxの画像にリサイズして収めたいと思っています。単に元画像を200x200pxにリサイズすると画像比率が維持されずに伸びた画像になりますが、そうではなく画像比率を維持したままリサイズし、余白部分には指定の色を設定できることを想定しています。

500x1000pxの画像をまずリサイズして100x200pxの画像にします。
これを200x200pxの画像にするために縦100px分の余白を指定カラーで埋めたいです。

いろいろ調べているのですが調べ方が悪いのか、方法がわかりません。
どうぞよろしくお願い致します。
■No32815に返信(suffreさんの記事)

元の画像 sw,sh
変更画像 dw,dh

tw = sw * (dh / sh)
th = sh * (dw / sw)

tw>dwより大きければ
dw, th
そうでなければ
tw, dh

とすればよいです。
まず、出力するサイズになるようにnew Bitmap(int, int)またはnew Bitmap(int, int, PixelFormat)で出力先となるBitmapオブジェクトを生成します。
次に、Graphics.FromImage(Image)でこの出力先のBitmapオブジェクトからGraphisオブジェクトを生成します。
GraphicsのClear(Color)で任意の色に塗りつぶします。
その後、GraphicsのDrawImage(Image, Rectangle)で元画像を描画します。
この際に渡すRectangleのX, Y, Width, Heightは自分で計算してください。
Hongliangさん、shuさんありがとうございます!
うまくできました!
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板