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

本文关键字:图像 WPF 添加 | 更新日期: 2023-09-27 18:21:29

作为应用程序的一部分,我有一个画布对象<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 64位上使用.net 4编译

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

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

问题已解决:Paint报告的DPI不正确。使用替代涂料包(paint.net)显示DPI不同。更正此设置可修复此问题。

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

hand.Stretch = Stretch.None;

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

更新II:我明白了,你找到了解决方案。我很高兴你成功了:)。