添加到WPF画布的图像大小发生变化

3
作为应用程序的一部分,我有一个画布对象<Canvas Name="canvas"/>,我正在尝试将时钟组件插入其中,如下所示。
// Add Background
Image bg = new Image();
bg.SetValue(Canvas.ZIndexProperty, 0);
bg.Source = new BitmapImage(new Uri("images/background.png", UriKind.Relative));
canvas.Width = bg.Source.Width;
canvas.Height = bg.Source.Height;
canvas.Children.Add(bg);

// Add second hand
Image hand = new Image();
hand.SetValue(Canvas.ZIndexProperty, 10);
hand.Source = new BitmapImage(new Uri("images/hand.png", UriKind.Relative));
canvas.Children.Add(hand);

第一张图片(bg)显示正确,但第二张图片(hand)似乎被缩放了(原始尺寸为5 x 61像素,创建后查询图像大小显示为6.66 x 84.02显示单位)(bg原始尺寸为130 x 130像素,在显示单位中显示为130.4)。
我找到的所有问题答案(StackOverflow和Google)都建议检查图像的DPI设置,但是我的两个图像都是96 DPI(根据Paint的说法)。
我尝试将图像声明移入XAML(不是长期解决方案),但这没有任何效果。 我尝试更改插入图像的顺序,也没有效果。 我在XAML中明确设置了画布的宽度/高度-没有效果。 我明确设置了图像的大小-同样没有效果。
有人能告诉我发生了什么吗?
补充说明:在Windows7 64位上使用.net 4编译
已解决:
Paint错误地报告了图像的DPI设置。 Paint.Net给出了正确的值,通过将其更改为96 DPI,问题得到解决。

你写代码而不是用XAML的原因是什么? - Samuel Slade
1
大多数设置将是动态的。 手将根据需要旋转,秒针是可选的。 未来,我预计会有各种可选组件,这些组件将通过编程方式决定。 - Taoist
新增:我刚刚尝试在XAML中添加这两个图像 - 仍然存在同样的问题。 - Taoist
4
要么将您的解决方案发布为答案并接受它,要么如果您认为它对其他人没有用处,则删除该问题。 - H.B.
我现在已经将解决方案发布为答案。一旦我的声望允许,我会接受它。 - Taoist
2个回答

1
问题已解决:Paint 报告了错误的 DPI。使用另一个绘图软件(Paint.net)显示 DPI 不同。更正此设置即可解决问题。

0
你没有为第二张图片设置 WidthHeight,这可能导致了问题。你可以尝试通过添加一行代码来禁用图像拉伸(即使控件被缩放,也至少不会缩放图像):
hand.Stretch = Stretch.None;

更新:我刚刚注意到您已经尝试设置图像的尺寸。请尝试在代码中进行设置。我目前正在寻找此问题的其他可能原因。

更新 II:我看到您已经找到了解决办法。很高兴您已经解决了它 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接