这个库包含两个头文件,stb_image.h/stb_image_write.h(对应读写),函数的定义也定义在头文件里,所以include之前需要定义以下的两个宏
STB_IMAGE_IMPLEMENTATION STB_IMAGE_WRITE_IMPLEMENTATION
另一方面,因为定义宏之后函数定义就会被展开,所以一个项目中不要多个文件同时都引用这两个头文件,链接时会产生冲突。推荐做法是使用这个库提供的函数将图片的读写操作包装好,工程的其他部分使用自己包装的类/函数。
stbi_uc *stbi_load(char const *filename, int *x, int *y, int *comp, int req_comp); void stbi_image_free(void *retval_from_stbi_load);
图片指针使用的是unsigned char*
经常使用的几种编码格式:
STBIWDEF int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes); STBIWDEF int stbi_write_jpg(char const *filename, int x, int y, int comp, const void *data, int quality); STBIWDEF int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data);
#include<algorithm> #define STB_IMAGE_IMPLEMENTATION #include"stb_image/stb_image.h" #define STB_IMAGE_WRITE_IMPLEMENTATION #include"stb_image/stb_image_write.h" int main() { const char *file_path="./IMG_20210421_110642_690.jpg"; int width,height,com;//宽度 高度 通道 unsigned char *image=stbi_load(file_path,&width,&height,&com,3); printf("%d %d %d\n",width,height,com); //After Image Process stbi_write_png("./Save.png",width,height,com,image,0); stbi_image_free(image); return 0; }