将ICO文件写入具有图标句柄的磁盘



我们只说它有一个C#中图标图像的句柄。有没有办法将内容保存为磁盘上的有效ICO文件?我什么都试过了,但没有运气。

我想到的第一个解决方案是基于图标句柄创建一个位图对象,然后将此位图保存为ico文件。问题是.net的实现不起作用,只输出纯PNG数据。

然后我试着自己实现编码器。基于ICO容器的头部描述,我实现了这一点,并且工作起来很有魅力,但前提是我使用png数据作为有效载荷。

如果我使用位图数据(这是需要的),输出文件不会被操作系统识别为有效的.ico文件。

我99%确信问题出在我将位图数据写入ICO容器的方式上。

根据一篇文章,我发现当ico文件中的格式是PNG图像时,它必须与PNG标头一起编写。如果是位图图像,则必须只写入位图的原始数据,而不写入位图标头。

好吧,我尝试的是使用bitmap对象的Lockbits()函数获取位图数据(作为字节数组),并在ico头之后写入,然后保存文件。我确信我把信头写对了。但我想我错过了什么,否则

将位图数据写入ico文件的正确方法是什么??此外,我想知道是否有其他解决方案可以将HICON(C#中的INtPtr)句柄的内容写入ico文件。

.ico文件不是位图文件(有些程序对它们一视同仁,但它们掩盖了用户的差异)。

.ico图标文件包含ICO标题,但也包含一个"目录",其中包含图标的每个子图像的条目。然后,每个子图像都是一个位图对象(具有Win32位图标头,但没有Win32位图文件标头,是的,这很令人困惑)。

这里有一些开源代码演示了CodePlex上的ico处理:http://anolis.codeplex.com/SourceControl/changeset/view/69709#930335(查看Save方法)。

相关内容

  • 没有找到相关文章

最新更新