我们只是说在 C# 中有一个图标图像的句柄。有没有办法将内容保存为磁盘上的有效 ICO 文件?我已经尝试了一切,但没有运气。
我认为的第一个解决方案是基于图标句柄创建一个 Bitmap 对象,然后将此 Bitmap 保存为 ico 文件。问题是 .net 的实现不起作用,只输出纯 PNG 数据。
然后我尝试自己实现编码器。基于 ICO 容器的标头描述,我实现了这一点,并且工作起来就像一个魅力,但前提是我使用 png 数据作为有效负载。
如果我使用位图数据(这是想要的),输出文件不会被操作系统识别为有效的 .ico 文件。
我 99% 确定问题出在我将位图数据写入 ICO 容器的方式上。
根据一篇文章,我发现当 ico 文件中的格式为 PNG 图像时,它必须与 PNG 标头一起写入。如果它是位图图像,则必须只写入位图的原始数据而没有位图标题。
好吧,我尝试的是使用 Bitmap 对象的 Lockbits() 函数获取位图数据(作为字节数组)并写入 ico 标头之后的那些,然后保存文件。我确信我已经正确地编写了标题。但我认为我错过了一些东西,否则
将位图数据写入 ico 文件的正确方法是什么?另外,我想知道是否有另一种解决方案可以将 HICON(C# 中的 INtPtr)句柄的内容写入 ico 文件。