PictureBoxコントロールの画像がウィンドウのサイズに応じて自動的にサイズを調整し、アスペクト比は維持するようにしています。これまでのところ、SizeMode
をStretchImage
に設定するだけで、画像が拡張され、PictureBoxコントロール全体に収まります。これはアスペクト比を無視しますが、これは私が望んでいるものではありません。
アスペクト比を維持することは可能ですが、フォームのサイズが変化したときに動的に移動できる最大のサイズに画像を引き伸ばしますか?これを行うことは可能ですかandまだ中央揃えですか?ウィンドウのサイズが変更されるたびにメモリ内にイメージを再作成できると思いますが、これは悪い考えのようです。
これが PictureBoxSizeMode.Zoom
。ドキュメントは言う:
画像のサイズは、サイズ比を維持したまま拡大または縮小されます。
PictureBox.SizeMode
プロパティ。その関数のドキュメントの「備考」セクションにも次のように書かれています:
Zoom値を使用すると、PictureBoxに収まるように画像が拡大または縮小されます。ただし、元の縦横比は維持されます。
もちろん、PictureBox.SizeMode
プロパティは、デザイナーの[プロパティ]ウィンドウまたはコード(たとえば、フォームのコンストラクター)にあります。
myPictureBox.SizeMode = PictureBoxSizeMode.Zoom;
これが望みどおりの結果にならない場合は、常に自分でサイズ変更ロジックを実装できます。あなたの懸念は、コントロールがサイズ変更されるたびにメモリ内のイメージを再作成することは「悪い考えのように思われる」ことですが、なぜそれがあなたにそのように見えるのかはわかりません。唯一の問題は、古いBitmap
のような未使用のグラフィックスオブジェクトを破棄しないように注意した場合です。これらのオブジェクトには、解放する必要があるアンマネージリソースが含まれているだけでなく、リークさせただけでは、メモリに非常に大きな圧力がかかり始めます。
あるいは、一時的なビットマップの作成を回避するために、PictureBoxコントロールがおそらく内部で行うことを実行し、 Graphics.DrawImage
ストレッチを処理するメソッド。長方形を渡すと、長方形の内側に収まるように画像が自動的に拡大縮小されます。
'SizeMode'をZoom
に変更します。名前が示すように、「StretchImage」は画像ファイルに合わせて拡大します。除去の簡単なプロセスで同じ結果が得られたでしょう。
PictureBoxSizeMode
documentation によると、PictureBoxSizeMode.Zoom
アスペクト比を維持するための画像を取得します。画像の一部が画像ボックスからはみ出すことなく、可能な限り大きくズームします。
そして Dock
property (setting DockStyle.Fill
)を使用して、画像ボックスをコンテナのサイズにサイズ変更します。