2013-03-20 111 views
11

我試圖讓PictureBox控件中的圖像根據窗口的大小自動調整其大小,但保持高寬比。到目前爲止,只要將SizeMode設置爲StretchImage就會使圖像伸展以適合整個PictureBox控件。這忽略了長寬比,這不是我想要的。將PictureBox中的圖像調整到儘可能大,同時保持縱橫比?

是否可以保持寬高比,但仍然可以將圖像拉伸到可以隨着表單大小更改而動態變化的最大值?是否可以這樣做它仍然居中?我想我可以在每次窗口大小調整時重新創建內存中的圖像,但這似乎是一個糟糕的主意。

回答

16

我相信這是PictureBoxSizeMode.Zoom的效果。該文檔說:

保持大小比例增加或減少圖像的大小。

您在PictureBox.SizeMode屬性上設置此項。該功能文檔的「備註」部分還說:

使用縮放值會導致圖像被拉伸或收縮以適應圖片框;但是,原稿的高寬比保持不變。

你可以,當然,設置PictureBox.SizeMode財產無論是在設計師的屬性窗口或代碼(例如,在窗體的構造函數):

myPictureBox.SizeMode = PictureBoxSizeMode.Zoom; 

如果這沒有做什麼你想要,你總是可以自己實現調整大小的邏輯。你的擔心是每當控件調整大小時在內存中重新創建圖像「似乎是一個糟糕的主意」,但我不確定爲什麼它看起來像這樣。唯一的問題是如果你不小心銷燬不使用的圖形對象,如舊的Bitmap。這些對象不僅包含需要釋放的非託管資源,而且如果你讓它們泄漏,你將開始對內存施加極大的壓力。

或者,爲避免創建臨時位圖,您可以執行PictureBox控件在內部可能執行的操作,並使用Graphics.DrawImage方法處理拉伸。如果您將它傳遞給矩形,它將自動縮放圖像以適應矩形的內部。

+0

謝謝,不知何故,我完全錯過了「縮放」設置。這正是我想要的,雖然很高興知道你解釋的內部結構,尤其是Graphics.DrawImage - 我可能會在將來使用它... – Jon 2013-03-20 21:52:38

2

將'SizeMode'更改爲Zoom。 顧名思義,「StretchImage」會將其拉伸以適合圖像文件。簡單的淘汰過程會給你同樣的結果。

-4

您可以將其添加到Web瀏覽器控件。使用Ctrl和鼠標按鈕可以儘可能多地放大。

相關問題