我将.ico
文件的内容作为const char*
存储在内存中,我希望根据此数据创建HICON
。我目前的方法是将数据写入临时文件,然后使用LoadImage
。是否可以直接从内存中创建图标?
答案 0 :(得分:2)
如果你想在不使用GDI +和WIC的情况下这样做,那么你必须自己做一些解析,因为.ICO文件的格式与.EXE / .DLL中的图标资源不完全相同所以你不能使用基于资源的图标功能。可以找到官方二进制规范here,并且有一个很棒的博客系列here。
如果.ico文件中包含多个图像,则必须遍历图标目录,直到找到您满意的图像尺寸。然后,您可以致电CreateIcon
创建HICON
。
答案 1 :(得分:1)
使用CreateIcon
,您当然可以创建图标,但我不确定您是否可以使用png格式的图像数据来提供图标。
我在CreateIconFromResourceEx取得了成功(抱歉使用其他语言,但以此为例,您可以直接在C中使用该功能):
from ctypes import *
from ctypes.wintypes import *
CreateIconFromResourceEx = windll.user32.CreateIconFromResourceEx
size_x,size_y = 32,32 LR_DEFAULTCOLOR = 0
with open("my32x32.png", "rb") as f:
png = f.read()
hicon = CreateIconFromResourceEx(png, len(png), 1, 0x30000, size_x, size_y, LR_DEFAULTCOLOR)
希望它对你有所帮助。