После того, как у вас есть объект изображения, загруженный из его источника, высота и ширина (и размер, и все вспомогательные свойства) доступны только для чтения. Таким образом, вы застряли с методами GDI + для изменения размера в оперативной памяти, а затем отображать его соответствующим образом.
Существует множество подходов, которые вы можете использовать, но если вы захотите инкапсулировать это в библиотеку, которую вы сможете использовать повторно, если эта проблема возникнет снова, вы будете готовы к работе. Это не совсем оптимизировано (IE может иметь некоторые ошибки), но должно дать вам представление о том, как к нему подойти:
Image newImage = Image.FromFile(myFilePath);
Size outputSize = new Size(200, 200);
Bitmap backgroundBitmap = new Bitmap(outputSize.Width, outputSize.Height);
using (Bitmap tempBitmap = new Bitmap(newImage))
{
using (Graphics g = Graphics.FromImage(backgroundBitmap))
{
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
// Get the set of points that determine our rectangle for resizing.
Point[] corners = {
new Point(0, 0),
new Point(backgroundBitmap.Width, 0),
new Point(0, backgroundBitmap.Height)
};
g.DrawImage(tempBitmap, corners);
}
}
this.BackgroundImage = backgroundBitmap;
Я проверил это, и это сработало. (Он создал версию одного из моих обоев рабочего стола размером 200x200, а затем установил его в качестве фонового изображения главной формы в чистом проекте WinForms. Вам понадобятся using
операторы для System.Drawing
и System.Drawing.Drawing2D
.