【问题标题】:Why does each image render differently in my list为什么每个图像在我的列表中呈现不同
【发布时间】:2015-03-09 12:16:52
【问题描述】:

所以我有一个带有图像的文件列表。所以列表中某项的itemtemplate为:

<StackPanel Orientation="Horizontal">
    <Image Width="15" Height="15" Margin="0,0,3,0" Source="/MyProj;component/Resources/file.png"/>
    <TextBlock x:Name="Path" Text="{Binding FileName}"/>
</StackPanel>

但是为什么列表中的每个图像呈现不同的方式?示例如下:

如您所见,每张图片都有细微的差别。有些底线比其他的要粗。为什么是这样?我所期待的行为是每个项目看起来都一样

【问题讨论】:

  • 如果将Stretch=None 添加到图像中会如何?
  • 为什么这被否决了?问题很清楚,是否需要所有信息(尽管我承认添加源图像的大小会有所帮助)并且提出了一个有趣的问题,不是吗?详细解释造成这种情况的根本原因会很好。
  • @stijin Stretch=None 给出了图像的原始大小,但在定义的 Width x Height 空间中,因此您只能看到图像的左上角。我将调整图像大小,使其更小,然后重试。也感谢您支持这个问题,我也想知道为什么有人会否决一个清晰而有趣的问题

标签: c# wpf image list rendering


【解决方案1】:

尝试添加RenderOptions.BitmapScalingMode="HighQuality"。另一种选择是使用大小为 15 x 15 像素的图像。任何一个选项都应该有效。

编辑:

这里发生的情况是,例如,您有一个 20x20 像素的图像。如果你想以 15x15 px 的分辨率渲染它,你的程序应该如何处理两个分辨率之间没有一对一的函数?哪个像素应该最终出现在最终图像的哪个像素中?在您的情况下发生的情况是,WPF 有时会从边界获取像素,为黑色,有时相邻的像素不是。整个故事被称为aliasing。有多种技术可以克服因渲染时像素分辨率不匹配而产生的不同伪影,这称为antialising。也看看这个不错的article

【讨论】:

  • 出于好奇,这个答案有什么问题值得-1?
  • 没有投反对票,但尝试添加听起来你甚至不确定这是否真的是解决方案..
  • 因为我没有复制它,不过我想我可以给一个有用的提示。与其否决投票,不如给出没有帮助的反馈可能会有所帮助。因为根据我使用 WPF 的经验,我提出的两个选项都应该有效,因为它通常与图像的分辨率有关。
  • 另外,stackoverflow 要求您在投反对票时发表评论。
  • 所以我被否决了正确答案...但很高兴我能提供帮助:-)
【解决方案2】:

尝试在图片中添加Stretch="UniformToFill"

【讨论】:

  • 问题是关于为什么列表没有一致地呈现项目。就目前而言,这是一个修复建议,没有任何解释。它并没有真正回答这个问题。
  • 好的,重点。试图通过提出可能的解决方案来提供帮助,但如果不是应该这样做,我下次会使用 cmets
猜你喜欢
  • 2014-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 2019-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多