因为opencv不支持gif,所以需要自己将gif转成它支持的格式。之前在win平台下我使用的Cximage。现在移植到linux平台,Cximage不支持,就想找一个轻量的方法,因此想到了stb_image。
std::vector<unsigned char> bmpdata;
// void stbi_write_func(void *context, void *data, int size);
auto stbi_write_func = [](void *context, void *data, int size) -> void
{
std::vector<unsigned char> *p_vec = (std::vector<unsigned char> *)context;
unsigned char* p_data = (unsigned char*)data;
if (p_vec)
p_vec->insert(p_vec->end(), p_data, p_data + size);
};
int iw, ih, n;
// 加载图片获取宽、高、颜色通道信息
unsigned char *idata = stbi_load(lpszFilePath, &iw, &ih, &n, 0);
// 写入bmp图片
bmpdata.reserve(iw * ih * 4);
stbi_write_bmp_to_func(stbi_write_func, &bmpdata, iw, ih, n, idata);
stbi_image_free(idata);
这里我是把bmp数据放到内存里了,也可以直接调用stbi_write_bmp写入文件。