我想知道是否可以获得已重新调整大小以适合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