【问题标题】:How can I save the HICON as the file [duplicate]如何将 HICON 保存为文件 [重复]
【发布时间】:2022-11-04 12:48:52
【问题描述】:

我可以通过ExtractIconW 获得 HICON

例如:

package main

import (
    "log"
    "syscall"
    "unsafe"
)

func MakeIntResource(id uintptr) *uint16 {
    return (*uint16)(unsafe.Pointer(id))
}

const IDI_QUESTION = 32514

func main() {
    user32Dll := syscall.NewLazyDLL("User32.dll")
    procLoadIconW := user32Dll.NewProc("LoadIconW")

    hIcon, _, _ := syscall.SyscallN(procLoadIconW.Addr(),
        0, uintptr(unsafe.Pointer(MakeIntResource(IDI_QUESTION))),
    )
    log.Println(hIcon)
}

但是我不知道下一步我应该怎么做才能将HICON保存为文件(位图格式就足够了)。

【问题讨论】:

    标签: windows go winapi icons resources


    【解决方案1】:

    一个真正的 .ico 文件通常包含多个不同大小的图像,而 HICON 只是一个图像。

    如果目标是复制原始图标,那么您必须将LoadLibraryEx 作为数据文件,然后使用资源函数首先找到RT_GROUP_ICON,一旦您知道RT_ICON id,您就可以提取子-图像并编写您的 .ico。

    如果您仍然认为要保存 HICON,请致电GetIconInfo 获取图像。

    没有用于编写 .ico 文件的低级 Windows 函数。您可以尝试 GDI+ 或 WIC 或自己编写它们。文件格式非常接近资源格式(存储文件偏移量而不是资源 ID)。

    Windows 图标格式指南starts here...

    【讨论】:

      猜你喜欢
      • 2011-01-18
      • 2010-12-21
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 2020-12-27
      相关资源
      最近更新 更多