Сбросить изображение

Я пытаюсь перемасштабировать изображение снизу в 10 раз и сохранять его

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);

но когда я делаю это, он сохраняет масштабированное изображение, нарисованное на исходном изображении, и я не уверен, как исправить это

1 ответ

Вы должны скопировать исходное растровое изображение в новое растровое изображение, масштабируясь по мере продвижения. Пример (непроверенный):

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");

licensed under cc by-sa 3.0 with attribution.