2016-12-16 14 views
2

PictureBoxは、複数の異なるサイズを持つことができます(画面の解像度やウィンドウの状態などに依存します)。私が望むのは、imageの寸法(幅または高さ)のいずれかがPictureBoxのそれぞれの寸法を下回ると、imagePictureBoxに収めることです。PictureBoxが画像よりも小さい場合、画像をPictureBoxに合わせる

例:imageの幅がPictureBoxのそれよりも大きいが、imageの高さがPictureBoxのそれ未満である場合、それはのものに等しくなるまで、それはimage幅を変更しますPictureBox、元のアスペクト比を維持し、imageの中央に配置します。

PictureBoximageのサイズよりも大きい場合、画像は単に中央に配置されます。私がPictureBoxSizeMode.AutoSizeとした部分と、imagePictureBoxのサイズに基づいてimageを中心にするコードがあります。

picbx.ImageLocation = "Image path here"; 
picbx.SizeMode = PictureBoxSizeMode.AutoSize; 
picbx.Anchor = AnchorStyles.None; 
picbx.Location = new Point((picbx.Parent.ClientSize.Width/2) - (picImage.Width/2), 
          (picbx.Parent.ClientSize.Height/2) - (picImage.Height/2)); 
picbx.Refresh(); 

私が考慮する必要がないことは、現時点ではサイズ変更していることです。このウィンドウではサイズ変更が許可されていないため、初期ロード以外の状況を考慮する必要はありません。

私は近くにヒットするように見える多くの記事を見つけましたが、完全に機能するものはありません。 ストレッチimagePictureBoxよりも大きい場合のために正常に動作してズームimageAutoSizeプロパティは、コンテナのサイズに基づいてサイズを変更せず、をスキューが、私はimageの増加からズームを防止するための方法を発見していましたサイズはPictureBoxに合っています。

私はpicbx.ImageLocationに設定するとpicbx.Imageプロパティを設定していないよので、私はする必要があります寸法(幅または高さ)に基づいてPictureBoximage内側のサイズを変更する方法を把握するために、まだましサイズ変更のための参照。

答えて

4

あなたはPictureBoxImageサイズを知っている場合、あなたは、単に適切なSizeMode設定することができます - それ以外Zoom画像の幅や高さが、ピクチャボックスよりも大きい、CenterImage

var imageSize = picbx.Image.Size; 
var fitSize = picbx.ClientSize; 
picbx.SizeMode = imageSize.Width > fitSize.Width || imageSize.Height > fitSize.Height ? 
    PictureBoxSizeMode.Zoom : PictureBoxSizeMode.CenterImage; 
+0

を私がまさに必要。ちょうど正しい組み合わせが必要でした。ありがとう! – Hank

+0

デフォルトの方法ではなく特定のディメンションに合わせてズームを設定する方法はありますか?ズームしたいと思ったらズームのような高さではなく幅にズームするのですか? – Hank

+0

私はそうは思わない。両方のディメンションに合わせて縮尺を変え、元の画像の比率を維持します。これは理にかなっています。特定の次元に合うのはどういう意味ですか? 1つをフィットし、他のカット? –

関連する問題