web-dev-qa-db-ja.com

縦横比を維持しながら、PictureBox内の画像のサイズを可能な限り大きくしますか?

PictureBoxコントロールの画像がウィンドウのサイズに応じて自動的にサイズを調整し、アスペクト比は維持するようにしています。これまでのところ、SizeModeStretchImageに設定するだけで、画像が拡張され、PictureBoxコントロール全体に収まります。これはアスペクト比を無視しますが、これは私が望んでいるものではありません。

アスペクト比を維持することは可能ですが、フォームのサイズが変化したときに動的に移動できる最大のサイズに画像を引き伸ばしますか?これを行うことは可能ですかandまだ中央揃えですか?ウィンドウのサイズが変更されるたびにメモリ内にイメージを再作成できると思いますが、これは悪い考えのようです。

11
Jon

これが PictureBoxSizeMode.Zoom 。ドキュメントは言う:

画像のサイズは、サイズ比を維持したまま拡大または縮小されます。

PictureBox.SizeMode プロパティ。その関数のドキュメントの「備考」セクションにも次のように書かれています:

Zoom値を使用すると、PictureBoxに収まるように画像が拡大または縮小されます。ただし、元の縦横比は維持されます。

もちろん、PictureBox.SizeModeプロパティは、デザイナーの[プロパティ]ウィンドウまたはコード(たとえば、フォームのコンストラクター)にあります。

myPictureBox.SizeMode = PictureBoxSizeMode.Zoom;

これが望みどおりの結果にならない場合は、常に自分でサイズ変更ロジックを実装できます。あなたの懸念は、コントロールがサイズ変更されるたびにメモリ内のイメージを再作成することは「悪い考えのように思われる」ことですが、なぜそれがあなたにそのように見えるのかはわかりません。唯一の問題は、古いBitmapのような未使用のグラフィックスオブジェクトを破棄しないように注意した場合です。これらのオブジェクトには、解放する必要があるアンマネージリソースが含まれているだけでなく、リークさせただけでは、メモリに非常に大きな圧力がかかり始めます。

あるいは、一時的なビットマップの作成を回避するために、PictureBoxコントロールがおそらく内部で行うことを実行し、 Graphics.DrawImage ストレッチを処理するメソッド。長方形を渡すと、長方形の内側に収まるように画像が自動的に拡大縮小されます。

16
Cody Gray

'SizeMode'をZoomに変更します。名前が示すように、「StretchImage」は画像ファイルに合わせて拡大します。除去の簡単なプロセスで同じ結果が得られたでしょう。

2
ZorleQ

PictureBoxSizeMode documentation によると、PictureBoxSizeMode.Zoomアスペクト比を維持するための画像を取得します。画像の一部が画像ボックスからはみ出すことなく、可能な限り大きくズームします。

そして Dock property (setting DockStyle.Fill )を使用して、画像ボックスをコンテナのサイズにサイズ変更します。