我想阅读ICO文件并将每个图标保存到单独的BMP中。
我的代码为ICO文件中的第一个图标提供了技巧。但后来我不知道在哪里设置文件光标(在哪里fseek)。
以下是我在伪代码中执行的步骤:
- 读取ICONDIR =读取前6个字节:
- UInt16为'reserved'(始终为0)
- Uint16为'type'(ICO为1,CUR为0)
- Uint16为'count'(图标数量)
- 读取ICONDIRENTRY =接下来的16个字节
- Uint8为'width'
- Uint8为'height'
- Uint8为'colors'
- Uint16为'color planes'
- Uint16为'每像素位数'
- Uint32为'图像尺寸'
- Uint32为'offset'
- 将文件位置设置为'offset'。
读BITMAPINFOHEADER =接下来的40个字节
- Uint32为'标题大小'
- Uint32为'width2'
- Uint32为'height2'
- Uint16为'color planes2'
- Uint16为'bits per pixel2'
- Uint32为'压缩'
- Uint32为'图像长度'
- Uint32为'dpi X'
- Uint32为'dpi Y'
- Uint32为'使用的颜色'
- Uint32为'重要颜色'
- 读取图像的像素,从offset = 40 +'offset'读取'width'*'height'*'每像素位数'/ 8字节。
我从ICO文件中获得了第一个图标。到现在为止还挺好。
醇>
但是我现在要去哪里?我试着从我完成的地方读书,但没有运气。
我知道下一个图标的大小是48x48字节,所以我想我应该阅读下一个ICONDIRENTRY,它应该给我'width'和'height'= 48.但我不知道从哪里开始阅读。
我正在用PHP编写程序,但是像这样的问题的PHP人员通常说'使用库X'或'使用ImageMagick'而我只需要知道算法。这些程序通常用C ++编写,所以我标记了这个C ++。
ICO文件中的下一个ICONDIRENTRY(偏移量)在哪里?