イメージ オブジェクトをソースからロードすると、Height と Width (および Size とすべての補助プロパティ) は読み取り専用になります。そのため、RAM でサイズを変更し、それに応じて表示するための 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;
私はこれをテストしましたが、うまくいきました。(デスクトップの壁紙の 1 つの 200x200 サイズ変更バージョンを作成し、それをスクラッチ WinForms プロジェクトのメイン フォームの背景画像として設定しました。とusing
のステートメントが必要です。System.Drawing
System.Drawing.Drawing2D