从image类获取实际图像大小的简单方法

本文关键字:简单 方法 图像 image 获取 | 更新日期: 2023-09-27 18:09:48

我有一个对象的图像类(System.Windows.Controls.Image)的拉伸属性设置为统一。我知道图像控件的大小,当然还有源图像的大小,但我正在寻找一种简单的方法来获得可见图像的实际大小。

举例说明会更容易些。我的图像控件大小绑定到主窗口大小,如果它的大小是1920 x 1080,源图像的大小是500 x 500,我将看到一个大小为1080 x 1080的图像。有什么简单的方法可以得到这个尺寸吗?

从image类获取实际图像大小的简单方法

您不应该将图像控件的大小绑定到窗口大小。相反,使用Grid作为容器。它会自动调整Image子元素的大小。然后ActualWidthActualHeight属性直接返回控件的实际大小:

<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);
}

你需要计算比例因子。这取决于图像的大小和控件的大小之间的关系

首先,分别计算水平和垂直缩放因子:

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;