【问题标题】:Listview images quality became lowListview 图像质量变低
【发布时间】:2014-12-24 20:49:17
【问题描述】:

我正在玩我的listbox,但我意识到图像质量突然下降了。 listbox 使用imagelist 控件来查看其图标。这是我的设计器代码中的listboximagelist 属性。

列表视图:

this.listviewFiles.Font = new System.Drawing.Font("Georgia", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.listviewFiles.LargeImageList = this.imageListFiles;
this.listviewFiles.Location = new System.Drawing.Point(3, 14);
this.listviewFiles.Name = "listviewFiles";
this.listviewFiles.Size = new System.Drawing.Size(761, 392);
this.listviewFiles.TabIndex = 4;
this.listviewFiles.UseCompatibleStateImageBehavior = false;
this.listviewFiles.SelectedIndexChanged += new System.EventHandler(this.listviewFiles_SelectedIndexChnaged);
this.listviewFiles.Click += new System.EventHandler(this.listviewFiles_Click);

图像列表

this.imageListFiles.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListFiles.ImageStream")));
this.imageListFiles.TransparentColor = System.Drawing.Color.Transparent;
this.imageListFiles.Images.SetKeyName(0, "csv.ico");
this.imageListFiles.Images.SetKeyName(1, "sql.ico");

当前图像质量

图片的真实质量

【问题讨论】:

  • imageList 控件设置了哪些imageSize,原始图片尺寸是多少?
  • @Reniuz 都是64x64。我的列表框的LargeImageList ColorDepth 设置为Depth32Bit
  • 您的文档不完善,“真实质量”图像是 JPEG,我无法说明原始格式。 “质量差”的图像尺寸不合适,我不知道这是质量损失的原因还是只是制作屏幕截图的副作用。您必须创建一个复制项目,以便有人可以下载它并了解它真正的样子。
  • @HansPassant 真实图像是.ico 文件,正如我所说的64x64,位深度为32。如果重新调整大小,我想知道它会发生在哪里.
  • @HansPassant 但是我刚刚在imagelist 中注意到的奇怪的事情是,当我第一次更改图像时,它们会得到32x32PhysicalDimension 属性,当我添加它们后再次查看时属性更改回64x64。这可能是原因吗?该属性是只读的。

标签: c# winforms listview imagelist


【解决方案1】:

你可以试试这个

ImageList largeImageList = new ImageList();
largeImageList.ColorDepth = ColorDepth.Depth32Bit;
largeImageList.ImageSize = new Size(64, 64); //actual size of image
largeImageList.Images.Add(Properties.Resources.psd64);

ListView listView = new ListView();
listView.LargeImageList=largeImageList;

我认为它可以永远解决你的问题:))

【讨论】:

    【解决方案2】:

    当加载的图像为PNG或ICO格式时,图像列表图像的质量下降是一个常见问题。我也在 WinForm C# 应用程序中体验过。

    图片列表图片被序列化为Base64编码图片形式的.resx文件,我相信序列化图片的时候是有bug的,因为当它们被序列化多次时,你肯定可以看到质量下降(可能有什么东西弄乱了 alpha/透明度通道)。然后,当您从图像列表中删除图像并再次添加它们时,它们看起来很好,直到图像列表被序列化几次并且质量下降再次变得可见。

    我通过简单地避免在我的应用程序中使用图像列表解决了这个问题。使用数组或图像字典同样有效,并解决了质量下降问题。如果您仍想使用图像列表,另一种可能的解决方案是在运行时创建和填充图像列表,而不是使用设计器。

    【讨论】:

      猜你喜欢
      • 2014-10-14
      • 2019-08-23
      • 2021-06-16
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 2016-06-06
      相关资源
      最近更新 更多