介绍下一个轻量级图片解码库: SDL Image
对比ImageMagic的繁杂,我更喜欢SDL Image。
支持格式:(选自Readme)
BMP, PNM (PPM/PGM/PBM), XPM, LBM, PCX, GIF, JPEG, PNG,TGA, and TIFF formats.
06年做DLNA时候,那时经验不足,自己造了一堆轮子,GIF,JPEG,PNG,TIFF均自己手动解码。
现在回过头来看,还是经验和眼界的不足,当初2个人做了三个月,现在可能自己一个人一周就搞定了。
使用:(需要先安装SDL)
#include "SDL_image.h"
初始化:
IMG_Init(IMG_INIT_JPG);
数据输入:
SDL_RWops
对于普通文件,可以调用IMG_Load自动生成。
对于内存或网络文件,可能就需要自己封装I/O接口了。这方便都不是很难。觉得有难度的,可以自己去参考ffmpeg的URL Protocol代码
实现对 UDP、HTTP,RTP的封装。甚至可以参考百度云的API,实现对云文件的封装。
注意:
IMG_Load并不提供Cache机制,对于大文件来说,这个接口基本等于没有。
建议自己设计RingBuf,根据平台CPU Cache大小进行优化。
解码:
对于PNG来说,解码主要在IMG_png.c文件。
通过这个文件可以迅速学会libpng的封装技巧。
IMG_LoadPNG_RW
输出:
SDL_Surface
不足:
1> 没有考虑大文件情况,在嵌入式系统,可能会导致内存分配失败。
需要手动修改代码。
2> 没有提供文件信息解析API。
当然,对于我们来说,没必要吹毛求疵,自己动手修改代码,很快就能解决上面2个不足。
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
给了我们充分的发回空间。