delphi TIMageList 32位图标与多个图像看起来不好?

3pvhb19x  于 2023-04-05  发布在  其他
关注(0)|答案(1)|浏览(162)

我是C++ Builder的新手,我刚刚把我的普通图标添加到一个设置为32位的TImageList中,看起来很糟糕(当通过IDE在TImageList中查看或在它使用的控件中查看时,如TTreeView)。图标有多种大小,其中一种有48 x48,32 x32,24 x24,16 x16,所有RGB/A。32 x32 TImageList看起来比16 x16 TImageList好一点,它几乎就像它添加了第一个大小发现48 x48并按比例缩小,而不是挑选与TImageList匹配的大小,但那将是一个主要的限制,没有任何意义。我一定是做错了什么?有没有解决方案来确保它们看起来很好?

编辑:

我做了一个测试,从16 x16 TImageList中删除了所有项目并添加了这个(当然是在将.rc文件添加到项目之后):

void __fastcall TSharedDataModule::DataModuleCreate(TObject *Sender)
{
     for (UINT i=IDI_USER_ICON_START; i<=IDI_USER_ICON_END; i++) {
         TIcon *icon = new TIcon;
         icon->Handle = reinterpret_cast<HICON>(LoadImageW(HInstance, MAKEINTRESOURCE(i), IMAGE_ICON, ImageList16->Width, ImageList16->Height, 0));
         ImageList16->AddIcon(icon);
         delete icon;
    }
}

而且图标在TTreeView中看起来很棒,所以从.ico文件加载正确的图像看起来确实像是IDE中的一个bug或缺少的功能。
我确实注意到我的TDBGrid图标现在是纯黑色的,所以接下来我必须处理这个问题。
这就是答案吗,还是我错过了在IDE中需要执行的某些操作?

envsm3lx

envsm3lx1#

与 Delphi 文档中的声明相反,TImageList不能在设计时处理32位半透明图像。
https://docwiki.embarcadero.com/Libraries/Alexandria/en/Vcl.Controls.TImageList
PNG或BMP(32位,预乘与否)-将产生错误。以下是不同背景下的三个图像(非预乘bmp,预乘bmp,png)的示例:
On clBtnFace background
On clGreen background
这是一个长期存在的bug。它存在于所有的 Delphi 版本中,包括最新的Delphi 11。

相关问题