我想知道是否可以獲得已重新調整大小以適合PictureBox的圖像的顯示圖像尺寸。如何獲取顯示縮放以適合PictureBox的圖像的圖像尺寸
PictureBox的SizeMode屬性設置爲Zoom。所以原始圖像的縱橫比保存下來。我需要獲取顯示的圖像大小,但這不是通過API公開提供的。
我讀過一些答案,包括反思,但我寧願不這樣做。
我想知道是否可以獲得已重新調整大小以適合PictureBox的圖像的顯示圖像尺寸。如何獲取顯示縮放以適合PictureBox的圖像的圖像尺寸
PictureBox的SizeMode屬性設置爲Zoom。所以原始圖像的縱橫比保存下來。我需要獲取顯示的圖像大小,但這不是通過API公開提供的。
我讀過一些答案,包括反思,但我寧願不這樣做。
最簡單的方法就是自己抓住寬高比,這畢竟是簡單的數學。
首先確定圖像是垂直還是水平,然後簡單地分別獲取圖片框的高度或寬度,並確定給定該值的原始圖像縱橫比的寬度或高度(分別)。
OriginalImg.Height/OriginalImage.Width X PictureBox.Width = PictureBox.Height
哦,我覺得很傻。謝謝 – TGreg
這不是很準確。始終使用ClientSize。請記住,圖像需要縮放以適合寬度*或高度。 –
你有不可避免地利用PictureBox?我發現thread他們提供了一些選擇來解決你的問題。它似乎有點骯髒,雖然...
1)將圖片框設置爲正常或中心圖像,並做自己的圖像調整大小(使用Form Resize事件),照顧這裏的所有數學是一點點複雜,但非常可行...(請參閱裁剪/縮放線程注意:這是VB6代碼,但數學是相同的)
2)只需使用數學和計算職位...再次數學是更復雜一點,但也可以..(請參閱上面的數學相同的線程)..
我想這是一個WinForms應用程序。或者你也可以使用WPF控件?
在WPF中,您可以通過ActualWidth和ActualHeight獲取尺寸。
這個功能做了你想做的事:
private Size GetDisplayedImageSize(PictureBox pictureBox)
{
Size containerSize = pictureBox.ClientSize;
float containerAspectRatio = (float)containerSize.Height/(float)containerSize.Width;
Size originalImageSize = pictureBox.Image.Size;
float imageAspectRatio = (float)originalImageSize.Height/(float)originalImageSize.Width;
Size result = new Size();
if (containerAspectRatio > imageAspectRatio)
{
result.Width = containerSize.Width;
result.Height = (int)(imageAspectRatio * (float)containerSize.Width);
}
else
{
result.Height = containerSize.Height;
result.Width = (int)((1.0f/imageAspectRatio) * (float)containerSize.Height);
}
return result;
}
@GrantWinney是窗口形成 – TGreg