Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TImageList-真彩色&x2B;alpha通道与8位(256色)通道 我使用C++ Builder 2009,但我也把它标记为Delphi,因为我也希望在那里也存在同样的问题。_Delphi_C++builder_Vcl_Delphi 2009 - Fatal编程技术网

TImageList-真彩色&x2B;alpha通道与8位(256色)通道 我使用C++ Builder 2009,但我也把它标记为Delphi,因为我也希望在那里也存在同样的问题。

TImageList-真彩色&x2B;alpha通道与8位(256色)通道 我使用C++ Builder 2009,但我也把它标记为Delphi,因为我也希望在那里也存在同样的问题。,delphi,c++builder,vcl,delphi-2009,Delphi,C++builder,Vcl,Delphi 2009,我使用TImageList(16x16)并将其与TListView(SmallImages)和TTreeView相关联 我通过IDE(设计时)添加了新图标,并导入了一些16x16真彩色+alpha通道图标。在IDE中,它们看起来很好: 在运行时,它们看起来一点也不好: 特别注意边缘。顶部图标为图标5,底部图标为图标7。看看上图中他们应该是什么样子 当我将图标转换为8位(256色)图标并通过IDE导入它们时,它们在运行时看起来很好!因此,这对我来说无疑是一个解决方案。但是这些图标显然丢失了信息

我使用
TImageList
(16x16)并将其与
TListView
(SmallImages)和
TTreeView
相关联

我通过IDE(设计时)添加了新图标,并导入了一些16x16真彩色+alpha通道图标。在IDE中,它们看起来很好:

在运行时,它们看起来一点也不好:

特别注意边缘。顶部图标为图标5,底部图标为图标7。看看上图中他们应该是什么样子

当我将图标转换为8位(256色)图标并通过IDE导入它们时,它们在运行时看起来很好!因此,这对我来说无疑是一个解决方案。但是这些图标显然丢失了信息,虽然在16x16图标中几乎看不到,但我还是有点不明白为什么会发生这种情况

ImageList在设计时创建,并具有其默认属性

我还尝试了:
DrawingStyle=dsTransparent
ColorDepth=cd32Bit
,之后我不得不通过IDE再次导入图标。 结果是一样的。我想知道是否需要设置一个特定的
BlendColor

我需要做一些特殊的事情来支持真彩色图标吗? 还是TTreeView和TListView存在问题? 这是VCL限制还是Windows或。。 想法、建议

-其他信息-阅读David的评论后

我在我的项目中添加了一个新的TImageList,并添加了带有alpha通道的32位图标。接下来,我“黑”了我的代码,让它总是使用那个ImageList,它工作得很好

我在代码中所做的是,因为我有一组用于所有操作系统的图标(非常与应用程序相关),并且因为我也使用特定于操作系统的图标,如文件夹图标、CD图标等。我有一个包含所有图标(操作系统和应用程序特定)的图像列表,以及程序启动和操作系统检查,我将需要的操作系统图标从一个列表复制到我使用的列表中

像这样:

TIcon *Icon = new TIcon() ;
for (int x = 0 ; x < OS_Specific_count ; x++)
  {
  OS_xx_ImageList->GetIcon(x, Icon) ;
  Use_ImageList->ReplaceIcon(x, Icon) ; 
  }
delete Icon ;
从一个空的Use_ImageList开始,似乎可以正确保存所有alpha通道数据!
也许我应该重写代码,以便总是以这种方式复制该地块…

真彩色?为什么不是32bpp,每个通道8个像素。@DavidHeffernan-这就是IcoFX的名字。但它是一个带有alpha通道的32位图标,它直接来自OS图标库/dll。我在Delphi中非常高兴地使用这些图标。从Delphi 6开始就这样做了。尽管那时我们必须手动创建图像列表句柄。我们看不到的是你在做什么。也许你的代码有缺陷。这就是为什么我们要求一个新的解决方案。如果你做了一个测试,那么我们可以100%确定我们在看与你相同的程序。@DavidHeffernan-你是对的!!!我在底部添加了一个包含新信息的部分。我需要注销,但明天会跟进。@DavidHeffernan-知道为什么在ImageList中获取图标或位图并替换它会“破坏”alpha通道信息吗?真彩色?为什么不是32bpp,每个通道8个像素。@DavidHeffernan-这就是IcoFX的名字。但它是一个带有alpha通道的32位图标,它直接来自OS图标库/dll。我在Delphi中非常高兴地使用这些图标。从Delphi 6开始就这样做了。尽管那时我们必须手动创建图像列表句柄。我们看不到的是你在做什么。也许你的代码有缺陷。这就是为什么我们要求一个新的解决方案。如果你做了一个测试,那么我们可以100%确定我们在看与你相同的程序。@DavidHeffernan-你是对的!!!我在底部添加了一个包含新信息的部分。我需要注销,但明天会跟进。@DavidHeffernan-知道为什么在图像列表中获取图标或位图并替换它会“破坏”alpha通道信息吗?
TBitmap *Bitmap= new TBitmap () ;
for (int x = 0 ; x < OS_Specific_count ; x++)
  {
  OS_xx_ImageList->GetBitmap(x, Bitmap) ;
  Use_ImageList->Replace(x, Bitmap, NULL) ; 
  }
delete Bitmap;
Use_ImageList->AddImage(OS_xx_ImageList, x) ;