问题标签 [tpngimagelist]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
777 浏览

delphi - 如何提高 Delphi TPngImageList(或 TImageList)的加载时间

我在我的应用程序中使用了一组大约 100 个图标,这些是使用固定的参考数字访问的,并且这些数字也可供用户选择一个图标。所需的三种分辨率是 16x16、32x32 和 48x48。这些分辨率中的每一个都保存在 TPngImageList 中,我使用 TDataModule 创建了一个“图标库”,而不是包含这三个图像列表 (TArtImageLibraryImageLists)。当需要任何图像列表时,一个简单的“首次使用时创建”方法会实例化此 TDataModule。任何需要访问图像列表的控件的 LargeImages 或类似属性只需调用所需的分辨率函数即可。

问题是程序启动时的加载时间,在快速机器上约为 1s。显然,最坏的罪魁祸首是 48x48 图像列表,但我想知道是否有更好的加载机制(例如使用资源文件?)可以加快速度。或者有没有办法重新格式化图像列表?我在运行时仍然需要一个 TImageList,例如我的 TreeView 等。

谢谢,布赖恩。

0 投票
1 回答
834 浏览

delphi - Delphi7 CustomImageList 问题

我遇到了以下问题:

我的 Delphi7 程序在大多数运行 WinXP/Vista/7 的计算机上运行顺畅,但在一些较旧的 Windows XP 安装上(只有少数)我遇到以下问题:

我有一个系统映像列表,我正在将自己的图标添加到系统映像列表的副本中。添加我的图标后,我得到一个“无效的图像大小”。EInvalidOperation 错误。

这是有问题的代码:

更糟糕的是,我使用的是 TPngImageList 组件,但根据代码,它似乎只是调用了标准的 Delphi 函数:

我最近发现,在其中一台出现此问题的计算机上,uxtheme.dll 或 explorer.exe 已被一些 Windows 皮肤程序修补。

所以我想有人或某个程序正在以一种使我的 Delphi 程序崩溃的方式入侵系统映像列表。

有想法该怎么解决这个吗?

谢谢!

0 投票
3 回答
5914 浏览

delphi - Delphi 和 48x48(或更大)图像列表 - 有解决方法吗?

我正在获取系统图像列表(使用 SHGetFileInfo 和 SHGFI_LARGEICON),添加两个我自己的图标并将其附加到 TListView。

问题是,如果用户的图标大小未设置为 32x32(例如设置为 48x48),Delphi7 TImageList 将失败并出现“无效图像大小”错误。

有谁知道是否有解决方法?我试过使用 TPngImageList 但它会导致其他问题。

另外,请注意,我想保留图标的 Alpha 通道。正常的 1 位透明度是不够的,因为图标往往看起来很难看。

谢谢!

0 投票
1 回答
547 浏览

delphi - 如何将 DIB 转换为 TPNGObject?

我有一个 DIB 句柄。如何TPNGObject在保留透明度的情况下将其转换为?

编辑: 我在这个解决方案中使用方法 2这里

但是即使我将其Transparent标志设置为真,位图结果也不透明

0 投票
1 回答
1115 浏览

delphi - DIB 到 Tbitmap 代码操作以适应 PNG 图像?

我使用此代码将 DIB 转换为 TBitmap,那么如何操作此代码以适合 PNG 图像(保持其透明度)?我厌倦了将透明属性设置为 true,但似乎代码是为 256 色位图制作的。

代码来源:这里

0 投票
2 回答
2950 浏览

delphi - 如何在 Delphi 中将 PNG 图像的颜色从白色更改为黑色?

我在 Delphi XE2 中使用 Gustavo Daud 1.4 版中的 TPNGList

它保存了一些我用作按钮图像的 PNG 256x256 图像。

但是需要更改背景颜色并且图像的对比度不好。

所以我现在有深色背景的白色图像。

我需要将它们更改为黑色以获得浅色背景。

有透明度,应该保留。只有白色像素。但是,目标函数的通用源也很好。

编辑:在“去吧”的建议之后,我尝试了以下方法,但只得到黑色或白色框:

我使用以下代码调用它:

不知道哪一部分是错的。这是一个组件的一部分,我正在尝试更改在设计时分配的图像。这是我加载的PNG图像,256x256,透明。

我需要使用那个 TImage,我知道它不是一个按钮。可能有一些组件可以做到这一点。我需要自己制作,因为我正在使用一个特定的库。

我从 PNGFunctions 上的 Gustavo 函数之一获得了 PNGInvertWB 的想法:

所以,我根本没有图像经验,这段代码有什么问题?

这是我拥有图像的组件上的样子:

原来的: 原来的

后: 在上面这个函数之后

我使用了 PNGFunctions 中的以下函数来尝试这个:

我在哪里更改了 GrayscaleRGB,因为它正在获取每个像素并将其更改为灰度,所以我相信我可以相应地更改为黑色或白色。

0 投票
1 回答
146 浏览

delphi - 第二次分配 TPngImageCollectionItem 对象 TreeView 后仍然绘制第一个分配的图像(Delphi XE 7)

我使用最后一个 TPngComponents “ PngComponents for Delphi 2009 - Delphi 10.2 Tokyo ”。创建简单的项目来展示我的问题。

为什么在第二次分配 TPngImageCollectionItem 对象 TreeView 后仍然绘制第一个分配的图像并且可能需要调用一些刷新函数?

例子:

在此处输入图像描述