【问题标题】:How to put PNG into TImageList?如何将PNG放入TImageList?
【发布时间】:2014-11-30 21:28:39
【问题描述】:

我有一个 PNG 图像,我试图在设计时将其加载到 TImageList

我有一个图像列表,然后我尝试打开我的 png:

添加后出现的图片不正确:

我缺少打开文件的哪些步骤?

编辑:让我们尝试更多文件

编辑:更多设置

还有其他人想看到的变化吗?

【问题讨论】:

  • 你确定你的 PNG 是 PNG 不仅仅是扩展名错误的位图吗?
  • 在这里工作正常。不明白为什么要修改图像列表的DrawingStyleMasked 属性。或者实际上您如何能够修改透明颜色下拉菜单。我不能这样做。您能否将实际文件上传到文件共享站点。另外,你为什么在设计时这样做。它不能很好地配合字体缩放和高 DPI。
  • @DavidHeffernan 其他地方的其他答案坚持您必须针对某些特定的DrawingStyleColorDepth。剩下的就是我随机尝试让事情顺利进行。我会发布更多TImageList不同设置的截图
  • 当我构建 32bpp 图像列表时,我只设置了 ColorDepth。
  • @DavidHeffernan 这应该与我的第二个附录截图相符。

标签: delphi delphi-xe6


【解决方案1】:

问题是我使用了GraphicEx library中包含的函数:

procedure Stretch(NewWidth, NewHeight: Cardinal; Filter: TResamplingFilter; 
      Radius: Single; Source: TBitmap);

对这个函数的调用被抽象在一个 ResizeGraphic 辅助函数中。

问题是GraphicEx 也有它自己的PNG 实现:

TPNGGraphic = class(TGraphicExGraphic)

然后在运行时将其注册为可用的文件格式:

initialization
RegisterFileFormat('png', gesPortableNetworkGraphic, '',
      [ftRaster], False, True, TPNGGraphic);

输入自定义控件

我们使用一些自定义的 Delphi 组件。

其中一些组件直接或间接导入对GraphicEx 的引用。这意味着GraphicEx 正在接管PNG 文件类型的处理,而不是设计时IDE 中存在的任何类。

解决方案是在GraphicEx.pasinitialization 部分中定义所有RegisterFileFormat

{$ifdef PortableNetworkGraphic}
RegisterFileFormat('png', gesPortableNetworkGraphic, '', [ftRaster], False, True, TPNGGraphic);
{$endif}

然后重新构建我所有的运行时和设计时包。

完成后,IDE 重新启动:

注意:任何发布到公共领域的代码。无需署名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 2011-10-26
    • 1970-01-01
    • 2012-01-19
    • 2014-06-19
    • 1970-01-01
    相关资源
    最近更新 更多