Table of Contents

STB_Image


使用

这个库包含两个头文件,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;
}