【发布时间】:2019-03-18 14:05:39
【问题描述】:
我有一个TImageList,其中包含透明图标(32 位,带 alpha 通道)。我想要做的是将基于图像索引的单个图标保存为 PNG 文件,同时保留 alpha 通道透明度。使用 RAD Studio 2010 支持TPngImage,无需第三方库。使用此处的方法 - Add a png image to a imagelist in runtime using Delphi XE 将图像从 PNG“精灵”图像加载到 TImageList 中,因此在加载时会保留透明度。现在我需要单独保存它们,换句话说,从已经加载到 TImageList 中的精灵图像中提取单个图像。
到目前为止我的代码:
int imageindex = 123;
boost::scoped_ptr<TPngImage> png(new TPngImage);
boost::scoped_ptr<Graphics::TBitmap> bmp(new Graphics::TBitmap);
MyImageList->GetBitmap(imageindex, bmp.get()); // Using GetBitmap to copy TImageList image into separate TBitmap
png->Assign(bmp.get()); // Assign that bitmap to TPngImage
png->SaveToFile("C:\\filename.png");
上述方法有效,但它以白色背景保存(保存后不保留透明度)。我可能错过了一个简单的步骤,但无法弄清楚。
也欢迎使用 Delphi 代码,应该不难翻译。
【问题讨论】:
-
试试
MyImageList->GetIcon(...),直接用文件扩展名.png保存图标 -
@KeremD,这是一种错误的方法。虽然图标将具有透明度,但它没有标准的 PNG 文件头,因此您将无法将此 png-icon 作为常规 PNG 文件打开。如果您尝试将 png-icon 提供给它,即使
TPngImage的实例也会失败并出现异常。像这样的简单设置扩展:MyIcon.png,不会使图标 real PNG 文件。 -
@Dima Sure,星期一早上...
标签: delphi png c++builder imagelist timagelist