【问题标题】:ImageList: 32-bit Images lose qualityImageList:32 位图像质量下降
【发布时间】:2012-04-29 14:17:04
【问题描述】:

我将ImageList 用于TreeViewListView。我首先将图像质量设置为 32 位,然后添加半透明图像。质量看起来不错,但经过​​几分钟的编码、编译和执行应用程序后,质量看起来很差。

看截图:

使用的属性

ColorDepth: Depth32Bit
ImageSize: 16; 16
TransparentColor: Transparent

半透明但不完全透明的像素后面有黑色像素。

重新添加所有图像可以恢复原始质量,但几分钟后,它看起来像在屏幕截图的右侧。

【问题讨论】:

  • Visual Studio 的哪个版本?我敢打赌,如果您在运行时加载图像列表,它会正常工作。可能是 VS 代码中的一个错误,它在设计时存储/加载图像列表状态。
  • 这是 VS2010 Ultimate。我还首先考虑在运行时加载它们,但这不是它应该的方式。还有其他想法吗?
  • 在运行时从资源加载正是我会做的。然后我可以选择与字体缩放相匹配的大小。
  • @bytecode77 无法在正确的线程中响应,因为 Hans Passant 删除了他的答案。关于将图像添加到 imagelist - 这很奇怪,看看:stackoverflow.com/questions/28902091/32-bit-images-on-imagelist

标签: c# winforms graphics imagelist


【解决方案1】:

当图像存储为ImageStream(VS Designer 的默认行为)时,Alpha 通道数据似乎丢失了。 因此,如果您可以停止使用 Designer 在ImageList 中设置图像,则可以使用最多ColorDepth.Depth32Bit 的半透明图像。 这很不方便,但它可以工作。

因此,您可以将图像放入Resources.resx 文件,并将它们添加到代码中的适当位置。例如在你 UserControl/Form 的构造函数中,通过如下代码调用 InitializeComponent() 后:

  _imageList.Images.Add(Resources.Image32);
  _imageList.Images.SetKeyName(0, "Image32");
  _myButton.Image = 0;

(此信息在 cmets 中可用于响应标记的答案,我已将此作为答案添加,因此很难错过另一个可用选项)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多