Greatest

All about 非主流脑残技术

导航

ICO文件格式的演化(四):PNG格式

原文:http://blogs.msdn.com/b/oldnewthing/archive/2010/10/22/10079192.aspx

我们以在Windows Vista中引入的PNG格式图标来结束这次的ICO文件格式演化之旅。

为了支持PNG,很自然地将BITMAPINFOHEADER中的biCompression改为BI_PNG即可。这时,image将使用PNG格式而不是DIB。毕竟这就是为什么要有biCompression字段的原因:提供对将来系统的兼容。

但是情况不是那么简单的。如果你在ICO文件中使用这种格式,那么很多有名的图标编辑软件在打开这种PNG压缩的图标文件都会崩溃。

问题在于解析图标文件的代码中并没有考虑到这个新的BI_PNG选项,并把它认为解析失败(或者根本就没有碰到这种错误的发生)。解决方法就是彻底改变PNG压缩图标的格式,使得那些程序提早的发现文件格式的错误。(这有些违背了参透测试要求调整数据使得错误发生在更深入更危险的阶段了。)

这种荒谬的为了增加兼容性的方式,反而降低的兼容性。

PNG格式图标的image简单地由一个PNG图像组成。图像必须是32bpp ARGB格式。没有前面的BITMAPINFOHEADER,也没有单色的mask。

由于我们不得不违背了以前ICO文件格式的兼容性,这也解决了上次提及的人们提供了错误mask的问题。用了PNG格式的图像,你不再需要提供mask了。mask自然而然的由PNG的透明通道提供。提供得越少越不容易犯错。

posted on 2010-10-26 21:02  Greatest  阅读(1088)  评论(1编辑  收藏  举报