【问题标题】:Bad image rendering in ListView in Win XPWin XP 中 ListView 中的图像渲染错误
【发布时间】:2012-07-23 15:38:06
【问题描述】:

我在基于 .NET 3.5 的 winforms 应用程序的 ListView 中渲染图像时遇到问题。

在 ListView 控件中,我使用 LargeImageList 作为缩略图。

应用程序在 Win 7 中正常工作 - 缩略图中的图像正常,但如果应用程序在 Win XP 中运行,缩略图中的图像会呈现错误。

在 Win 7 和 Win Xp 中渲染的区别在于 。

什么会导致这种行为?

已编辑:谢谢大家的回复和建议。已经解决了。我使用另一个控件而不是 winforms listview。

【问题讨论】:

  • 你能发布一些代码吗?也许图像稍微大一点,以便我们可以知道究竟有什么不同,除了一个丑陋/混乱?
  • @Cody Gray。应用代码相同,测试数据相同,但是在Win XP中的渲染与在Win 7中不同。你想看哪部分的应用代码?
  • 嗯,我在想代码来重现这个问题。这不是我以前见过的东西,所以我不知道一个共同的原因。此外,看起来有人的编辑意外删除了您的图像。我不知道为什么,但我解决了这个问题......

标签: c# winforms listview rendering thumbnails


【解决方案1】:

您可以尝试使用 免费 ObjectListView 控件来实现此目的。您可以从http://objectlistview.sourceforge.net下载。

基本实现

  1. 用 ObjectListView 替换您的常规 ListView 控件。
  2. 创建一个包含要在 ObjectListView 上显示的字段的类。
    这是必要的,因为 OLV 不直接使用 ListViewItem 来显示元素。
  3. 在 OLV 中创建列(在代码中)并指定将为该列显示的属性(从第 2 步开始)。
  4. 将要显示图像的列(通常是第一列)的ImageGetter 属性设置为返回与所需图像相对应的Imagestringint 的函数为项目显示。
    如果函数返回stringint,则该项目将显示OLV 的LargeImageListSmallImageList 中的图像。
  5. 创建要显示的项目的Enumerable 集合,并使用SetObjectsAddObjects 方法将其附加到OLV。
  6. 在返回要为项目显示的图像的函数中,使用 GDI(或任何您想要的方式)渲染图像并将其返回以在 OLV 中显示。

【讨论】:

    【解决方案2】:

    您可以查看Better ListView 组件。我们付出了巨大的努力来启用任意大小的缩略图:

    渲染使用 GDI+,因此结果在 XP 和 Windows 7 上看起来相同(当然,基于 Windows 主题的选择除外)。

    .NET ListView 是一个 Win32 控件包装器,因此外观很大程度上取决于操作系统,我们制作了一个完全用托管代码编写的控件来避免这些问题。

    【讨论】:

    • 但是这个库不是免费的:(
    猜你喜欢
    • 2021-09-06
    • 1970-01-01
    • 2020-07-26
    • 2010-10-29
    • 2017-09-01
    • 2019-07-12
    • 2014-03-18
    • 1970-01-01
    • 2012-10-20
    相关资源
    最近更新 更多