C# 为什么图像大小为NaN(wpf)以及如何通过鼠标滚轮调整大小?
我想加载一个图像并将其放入一个视图框中。图像显示正确,但是,当我要得到它的宽度和高度时,它都是NaN 这是我的图像加载代码:C# 为什么图像大小为NaN(wpf)以及如何通过鼠标滚轮调整大小?,c#,wpf,image,canvas,viewbox,C#,Wpf,Image,Canvas,Viewbox,我想加载一个图像并将其放入一个视图框中。图像显示正确,但是,当我要得到它的宽度和高度时,它都是NaN 这是我的图像加载代码: Image img = new Image(); img.Source = (ImageSource)new ImageSourceConverter().ConvertFromString("1.png"); Viewbox vb = new Viewbox(); vb.Width = img.Width; vb.Height = img.Height; vb.C
Image img = new Image();
img.Source = (ImageSource)new ImageSourceConverter().ConvertFromString("1.png");
Viewbox vb = new Viewbox();
vb.Width = img.Width;
vb.Height = img.Height;
vb.Child = img;
cnv.Children.Add(vb);
我想要获取图像宽度和高度的原因是,我可以在应用程序内部稍后通过viewbox resize调整图像大小
你知道如何获得图像尺寸吗
这就是我将如何通过鼠标滚轮调整它的大小
private void cnv_MouseWheel(object sender, MouseWheelEventArgs e)
{
if (vb != null)
{
vb.Width += Mouse.MouseWheelDeltaForOneLine;
vb.Height += Mouse.MouseWheelDeltaForOneLine;
}
}
它返回错误并说vb.Width不是有效值
总结起来的问题:
如何获得wpf中的图像宽度/高度?
如何调整viewbox的大小,这也会导致通过鼠标滚轮调整图像大小?例如,如果向上滚动控制盘,则宽度和高度增加1,如果向下滚动控制盘,则宽度和高度减少1。
多谢各位
附加视口vb;图像img;是一个全局变量,我只是缩短了脚本。
另外,我知道如果Viewbox的宽度和高度由一个数字初始化,比如说100和100,它会工作,我只想知道如何获得图像的原始大小
编辑:
可以通过检测e.Delta>0或e.Delta<0来检测其是否向上或向下滚动来实现调整大小
来源:图像对象在该阶段似乎没有完全加载。我相信您可以使用的宽度和高度属性。在这个阶段应该是满负荷的
对于其他用户,也可以从FrameworkElement类继承的Image类的ActualWidth和ActualHeight属性中找到所需的值,而不是更常见的宽度和高度属性
在该阶段,图像对象似乎没有完全加载。我相信您可以使用的宽度和高度属性。在这个阶段应该是满负荷的
对于其他用户,也可以从FrameworkElement类继承的Image类的ActualWidth和ActualHeight属性中找到所需的值,而不是更常见的宽度和高度属性
图像原始大小只能以像素为单位获得,而WPF控件是以设备无关像素为单位测量的,因此您必须从像素到设备无关像素进行转换,并在必要时进行转换 也就是说,要获取png文件的宽度和高度,可以将其加载到BitmapImage而不是图像中,并查询BitmapImage的PixelWidth和PixelHeight属性 同样,请注意,这是代码中处理像素的唯一位置,所有宽度和高度属性(包括ActualWidth和ActualHeight)仅在控件完全渲染后设置,都是以设备无关的像素度量的。这可能会产生误导,因为在很多情况下,这恰好是1:1的转换,但不能保证是这样
更多信息可在此处找到:图像原始大小只能以像素为单位获得,而WPF控件是以设备独立像素为单位测量的,因此您必须从像素到设备独立像素进行转换,并在必要时进行转换 也就是说,要获取png文件的宽度和高度,可以将其加载到BitmapImage而不是图像中,并查询BitmapImage的PixelWidth和PixelHeight属性 同样,请注意,这是代码中处理像素的唯一位置,所有宽度和高度属性(包括ActualWidth和ActualHeight)仅在控件完全渲染后设置,都是以设备无关的像素度量的。这可能会产生误导,因为在很多情况下,这恰好是1:1的转换,但不能保证是这样
可以在此处找到更多信息:尝试改用ActualWidth和ActualHeight属性。它在宽度和高度上都返回0,而不是NaN。在宽度和高度上的用法不同。可能您必须使用BitmapImage而不仅仅是Image来获取大小。请尝试改用ActualWidth和ActualHeight属性。它在宽度和高度上都返回0,而不是NaN。在宽度和高度上的用法不同。也许您必须使用BitmapImage而不仅仅是Image来获取大小。您能详细说明一下完全加载是什么意思吗?如果图像已成功显示,则它是否已完全加载?当您设置image.Source属性时,框架必须完成一些工作才能将实际源加载到内存中并使其可供显示。请参阅问题的答案,以了解我正在谈论的这类事情的示例。我想不出你没有得到维度值的任何其他原因,除了你的图像实际上没有维度。所以,有一个延迟,因为它们是在不同的线程上处理的?本质上,是的。以您使用的方式使用宽度和高度属性
它们不是WPF中推荐的做事方式。对于位图,最简单的方法可能是查看png文件的实际尺寸,请参见下面的答案。宽度和高度包含所需的宽度和高度或double.NaN如果未设置,则实际宽度和实际高度仅在呈现UI后有效,而在设置源属性后则无效。您能否详细说明完全加载是什么意思?如果图像已成功显示,则它是否已完全加载?当您设置image.Source属性时,框架必须完成一些工作才能将实际源加载到内存中并使其可供显示。请参阅问题的答案,以了解我正在谈论的这类事情的示例。我想不出你没有得到维度值的任何其他原因,除了你的图像实际上没有维度。所以,有一个延迟,因为它们是在不同的线程上处理的?本质上,是的。以使用宽度和高度属性的方式使用它们不是WPF中推荐的操作方式。对于位图,最简单的方法可能是查看png文件的实际尺寸,请参见下面的答案。宽度和高度包含所需的宽度和高度或double.NaN如果未设置,则ActualWidth和ActualHeight仅在呈现UI后有效,而在设置源属性后则无效。