我正在做一些工作,我正在以编程方式从OpenSearch文档中指定的站点下载图标,如果它是ICO格式,我需要提取第一个图像(现在)。我能够毫无问题地读取ICO文件头,并分出第一个图像文件。但是,在阅读Wikipedia entry explaining the file format后,我发现如果图像是位图格式,那么文件不完整(它缺少标题)。所以我需要重新构造这个头文件,然后才能将数据保存到文件中,但我遇到了一些困难。如何从ICO文件中提取BMP?
根据该Wikipedia entry for BMP file format,报头是14个字节长,并应包含以下内容:
Offset Data0x0000
"BM", for our intents and purposes0x0002
Size of the bitmap file in bytes0x0006
Dependant on the application creating the file0x0008
Dependant on the application creating the file0x000A
Offset of the image data/pixel array
我想,以字节为单位的位图文件的大小将是所提取的图像+的14的尺寸字节的头,但我不确定在0x0006,0x0008写什么,以及如何获取像素数组的位置在0x000A写入。
我已经读了几篇文章,但我必须承认我的头部有点疼。这是我做这类事情的第一次经历。任何人都可以帮助我弄清楚如何获得像素阵列的位置?
这对我不起作用。我正在查看[favicon for serverfault.com](http://sstatic.net/serverfault/img/favicon.ico)。如果我从图标目录中的OFFSET到OFFSET + SIZE中提取图像数据。然后我在0x000A处重新构建位图标题为36,将整个事件保存为bmp文件并尝试在窗口中加载结果。我收到一个错误,说该文件已损坏或太大。维基百科提示像素值在颜色表和可选的1字节间隙后开始。是对的吗? –
@Andy:这是因为ICO文件中的数据不是“常规”位图数据。查看我答案的更新版本。 –
啊,我现在看到了。我不能将位图拉出来,希望Windows能够显示它。我不得不将图像重建为PNG或其他东西。谢谢您的帮助。 –