我有一个Image类(System.Windows.Controls.Image)的对象,其Stretch属性设置为Uniform。我知道图像控件的大小,当然还有源图像的大小,但我正在寻找一种简单的方法来获得可见图像的实际大小。
通过示例更容易解释。我的图像控件大小绑定到主窗口大小,如果它的大小是1920 x 1080,源图像的大小是500 x 500,我将看到一个大小为1080 x 1080的图像。是否有一种简单的方法来获得这个大小?
答案 0 :(得分:1)
您需要计算缩放系数。这取决于图像大小和控件大小之间的关系。
首先,您可以单独计算水平和垂直缩放因子:
double hscale = (double)image.Width / imageControl.Width;
double vscale = (double)image.Height / imageControl.Height;
因此,如果将图像的宽度乘以hscale
,则结果将是控件的宽度。
现在,既然你想保持宽高比,你需要选择两者中最小的一个作为缩放因子:
double scaleFactor = Math.Min(hscale, vscale);
然后您可以计算将要显示的图像的大小:
displayedWidth = image.Width * scaleFactor;
displayedHeight = image.Height * scaleFactor;
答案 1 :(得分:1)
您不应将Image控件的大小绑定到Window大小。相反,使用Grid
作为容器。它会自动调整Image子元素的大小。然后ActualWidth
和ActualHeight
属性直接返回控件的实际大小:
<Grid>
<Image Source="..." SizeChanged="Image_SizeChanged"/>
</Grid>
获取代码背后的属性:
private void Image_SizeChanged(object sender, SizeChangedEventArgs e)
{
var image = (Image)sender;
Trace.TraceInformation("Size = {0} x {1}", image.ActualWidth, image.ActualHeight);
}