【问题标题】:Image added to WPF canvas changes size添加到 WPF 画布的图像更改大小
【发布时间】:2012-02-17 21:49:11
【问题描述】:

作为应用程序的一部分,我有一个画布对象 <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 显示单位) (原图为 130 x 130 像素,显示单位为 130.4)

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

谁能告诉我这是怎么回事?

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

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

【问题讨论】:

  • 你用代码而不是 XAML 编写这个有什么原因吗?
  • 大部分设置都是动态的。指针将酌情旋转,秒针是可选的。展望未来,我希望有各种可选组件,这些组件将以编程方式决定。
  • 添加:我刚刚尝试在 XAML 中添加两个图像 - 同样的问题
  • 要么发布您的解决方案作为答案并接受它,或者如果您认为它对其他人没有用处,则删除该问题。
  • 我现在已经发布了解决方案作为答案。只要我的代表允许,就会接受它

标签: c# wpf image wpf-controls


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    hand.Stretch = Stretch.None;
    

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

    更新 II:我知道您找到了解决方案。我很高兴你成功了:)。

    【讨论】:

      猜你喜欢
      • 2013-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-28
      • 1970-01-01
      • 2011-05-26
      相关资源
      最近更新 更多