添加到WPF画布的图像会更改大小

时间:2012-01-24 16:27:12

标签: c# wpf image wpf-controls

作为应用程序的一部分,我有一个画布对象<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)正确显示,但第二张图像(手)显示缩放(原始尺寸为5 x 61像素,创建后查询图像尺寸显示已变为6.66 x 84.02显示单位) (bg原件为130 x 130像素,显示单位为130.4)

我可以找到的查询的所有答案(StackOverflow和Google)建议DPI设置图像,但我的图像都是96 DPI(根据Paint) 我已经尝试将图像声明移动到XAML(不是长期解决方案),但这没有任何区别。我试过更改插入图像的顺序没有效果。我在XAML中明确设置了画布宽度/高度 - 没有效果。 我明确地设置了图像的大小 - 再次没有效果。

有人能告诉我发生了什么吗?

补充:在windows7 64bit上使用.net 4进行编译

解决: Paint报告的图像DPI设置不正确。 Paint.Net给了我正确的值,并将其更改为96 DPI,问题得到了解决

2 个答案:

答案 0 :(得分:1)

问题已解决:Paint报告的DPI不正确。使用备用油漆包(Paint.net)显示DPI不同。更正此设置可解决问题。

答案 1 :(得分:0)

您没有为第二张图片设置WidthHeight,这可能会导致问题。 您还可以尝试通过添加一行来禁用图像拉伸(这应该至少不会缩放图像,即使控件是缩放的):

hand.Stretch = Stretch.None;

更新:我刚刚注意到您已经尝试过设置图片的尺寸。尝试在代码中设置if。我正在寻找这个问题的另一个可能原因。

更新II :我看到您找到了解决方案。我很高兴你能让它发挥作用:)。