0

画像を 10 分の 1 に縮小して保存しようとしています

System.Drawing.Bitmap bmi     
var scaleWidth = (int)(bmi.Width * 0.1);
var scaleHeight = (int)(bmi.Height * 0.1);
Rectangle f = new Rectangle(0, 0, scaleWidth, scaleHeight);
Graphics graph = Graphics.FromImage(bmi);           
graph.DrawImage(bmi, new Rectangle(
    ((int)scaleWidth - scaleWidth) / 2, 
    ((int)scaleHeight - scaleHeight) / 2, 
    scaleWidth, scaleHeight));
string a = "a.jpg";
bmi.Save(a);

しかし、これを行うと、元の画像に描画されたスケーリングされた画像が保存され、これを修正する方法がわかりません

4

1 に答える 1

0

元のビットマップを新しいビットマップにコピーし、拡大縮小する必要があります。例 (未テスト):

Bitmap bmpOriginal = /* load your file here */
var scaleWidth = (int)(bmi.Width * 0.1);
var scaleHeight = (int)(bmi.Height * 0.1);
Bitmap bmpScaled = new Bitmap(scaleWidth, scaleHeight);
Graphics graph = Graphics.FromImage(bmpScaled );           
graph.DrawImage(bmpOriginal, new Rectangle(0, 0, scaleWidth, scaleHeight);
bmpScaled.Save("scaledImage.bmp");

編集: Bitmap クラスのこのコンストラクターに気付きました。これにより、コードを次のように単純化できます。

Bitmap bmpOriginal = /* load your file here */
var scaleWidth = (int)(bmi.Width * 0.1);
var scaleHeight = (int)(bmi.Height * 0.1);
Bitmap bmpScaled = new Bitmap(bmpOriginal, new Size(scaleWidth, scaleHeight));
bmpScaled.Save("scaledImage.bmp");
于 2013-08-07T01:11:26.003 に答える