零基础C/C++学习路线推荐,还有stb_image图像加载库介绍

网安智编 厦门萤点网络科技 2026-04-29 00:13 21 0
零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 ˃˃ C 语言基础入门 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 ˃˃ C 语言 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 ˃˃ C++ 面向...

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 面向对象

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 设计模式

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ STL

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 技术杂谈

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 常用函数

前面介绍了 svpng 函数,用于将 RGB / RGBA 图像保存为 PNG。今天在介绍另外一个 ;

一. 简介

.h 是 Sean 的一个非常流行的单头文件图像加载库,它能够读写大部分流行的文件格式,支持文件格式如下:

二. 配置到工程中使用

.h 代码在文章末尾,可以直接复制粘贴使用,当然也可以在 下载。

.h 加入你的工程,并另创建一个新的 C++ 文件,输入以下代码:

#define STB_IMAGE_IMPLEMENTATION  //必须加上
#include "stb_image.h"

通过定义 TION,预处理器会修改头文件,让其只包含相关的函数定义源码,等于是将这个头文件变为一个 .cpp 文件了,现在只需要在你的程序中包含 .h 之后输入你的代码并编译就可以了。

三. 读取

要使用 .h 加载图片,我们需要使用它的 函数:


/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C/C++ 使用 stb_image 加载 png / jpg / gif / bmp等常用图片
//@Time:2022/03/28 07:30
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/ 
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
/*
* 描述:载入图像,支持的图像文件格式包括JPEG、PNG、TGA、BMP、PSD、GIF、HDR、PIC、PNM
* 
* 参数:
*   filename:图像文件名
*   x:获取图像宽
*   y:获取图像高
*   channels_in_file:获取图像通道数
*   desired_channels:指定期望的通道数,若为0则不做颜色空间变换
*
* 返回值:加载图像成功返回图像数据指针,否则返回NULL;
*/
unsigned char *stbi_load            (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels);

四. 写入

C语言 pthread_cimage load 返回值_C语言基础入门

可以分别支持生产 png 和 jpg,函数声明如下

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C/C++ 使用 stb_image 加载 png / jpg / gif / bmp等常用图片
//@Time:2022/03/28 07:30
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/ 
#define STB_IMAGE_WRITE_IMPLEMENTATION
#define STB_IMAGE_WRITE_STATIC
#include "stb_image_write.h"
/*
* 描述:保存图像,支持的图像文件格式包括PNG、BMP、TGA、JPG、HDR
* 
* 参数:
*   filename:保存图像名
*   x:图像宽
*   y:图像高
*   comp:图像通道数
*   data:指定期望的通道数,若为0则不做颜色空间变换
*   quality:图像质量(quality,取值范围1~100,仅限jpg)
*
* 返回值:成功返回非0值,否则返回0。
*/
int stbi_write_jpg(char const *filename, int x, int y, int comp, const void *data, int quality)
 
/*
* 描述:保存图像,支持的图像文件格式包括PNG、BMP、TGA、JPG、HDR
* 
* 参数:
*   filename:保存图像名
*   x:图像宽
*   y:图像高
*   comp:图像通道数
*   data:指定期望的通道数,若为0则不做颜色空间变换
*   stride_bytes:步长,若为0则为宽*通道数,仅限png
*
* 返回值:成功返回非0值,否则返回0。
*/
int stbi_write_png(char const *filename, int x, int y, int comp, const void *data, int stride_bytes)

五. 缩放

缩放函数如下:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C/C++ 使用 stb_image 加载 png / jpg / gif / bmp等常用图片
//@Time:2022/03/28 07:30
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/ 
#define STB_IMAGE_RESIZE_IMPLEMENTATION
#define STB_IMAGE_RESIZE_STATIC
#include "stb_image_resize.h"
/*
* 描述:图像缩放
* 
* 参数:
*   input_pixels:输入图像数据指针
*   input_w:输入图像宽
*   input_h:输入图像高
*   input_stride_in_bytes:输入图像步长,若为0则为宽x通道数
*   output_pixels:输出图像数据指针
*   output_w:输出图像宽
*   output_h:输出图像高
*   output_stride_in_bytes:输出图像步长,若为0则为宽x通道数
*   num_channels:图像通道数,输入与输出一致
*
* 返回值:成功返回1,否则返回0;
*/
int stbir_resize(const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes,void *output_pixels, int output_w, int output_h, int output_stride_in_bytes,stbir_datatype datatype,int num_channels, int alpha_channel, int flags,stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical,stbir_filter filter_horizontal,  stbir_filter filter_vertical,stbir_colorspace space, void *alloc_context);

六. 内存释放

释放内存如下:

void     stbi_image_free      (void *retval_from_stbi_load);

七. 使用案例

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C/C++ 使用 stb_image 加载 png / jpg / gif / bmp等常用图片
//@Time:2022/03/28 07:30
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/ 
#include 
 
 #define STB_IMAGE_IMPLEMENTATION
 #include "stb_image.h"
 #define STB_IMAGE_WRITE_IMPLEMENTATION
 #include "stb_image_write.h"
 #define STB_IMAGE_RESIZE_IMPLEMENTATION
 #include "stb_image_resize.h"
 #include 
#include 
#include 
#include 
 
using namespace std;
 
int main() {
    std::cout << "Hello, STB_Image" << std::endl;
 
    string inputPath = "d://input.png";
    int iw, ih, n;
 
    // 加载图片获取宽、高、颜色通道信息
    unsigned char *idata = stbi_load(inputPath.c_str(), &iw, &ih, &n, 0);
 
    int ow = iw / 2;
    int oh = ih / 2;
    auto *odata = (unsigned char *) malloc(ow * oh * n);
 
    // 改变图片尺寸
    stbir_resize(idata, iw, ih, 0, odata, ow, oh, 0, STBIR_TYPE_UINT8, n, STBIR_ALPHA_CHANNEL_NONE, 0,
                 STBIR_EDGE_CLAMP, STBIR_EDGE_CLAMP,
                 STBIR_FILTER_BOX, STBIR_FILTER_BOX,
                 STBIR_COLORSPACE_SRGB, nullptr
    );
 
    string outputPath = "d://output.png";
    // 写入图片
    stbi_write_png(outputPath.c_str(), ow, oh, n, odata, 0);
 
    stbi_image_free(idata);
    stbi_image_free(odata);
    return 0;
}

八. 完整代码下载

源码下载地址:https://github.com/nothings/stb

九.猜你喜欢C语言 数组下标越界和内存溢出区别C语言 使用指针遍历数组C语言 指针和数组区别C语言 指针数组和数组指针区别C语言 野指针C语言 函数值传递和址传递函数不定长参数C语言 函数指针C语言 指针函数C语言 回调函数 语言 # onceC语言 # 与 # “” 区别C语言 const 修饰函数参数C语言 const 和 区别C语言 / / 自定义 函数C语言 main 函数参数 main(int argc, char *argv)C语言 结构体简介(一)C语言 结构体定义和使用(二)C语言 结构体数组(三)C语言 结构体指针(四)C语言 结构体成员函数(五)C语言 结构体嵌套(六)C语言 结构体值传递和址传递(七)C/C++ error: to non- data const ‘xxxx’C++ 关于类中 const 的使用C/C++ =/C++ 条件编译 #/C++ error C2065: “M_PI”: 未声明的标识符C/C++ error C2027: 使用了未定义类型“std::tuple”C/C++ vs 没有匹配 if 的非法 else 问题解决办法C/C++ 中文注释导致编译不能通过C/C++ error C2589: “(”: “::”右边的非法标记C/C++ error:表达式是必须修改的左值C/C++ error C4996: ‘getch’: The POSIX name for this item is . , use the ISO C++ confC/C++ error C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型C/C++ std:: 字符串分割C/C++ std:: 使用介绍 中 工具使用C/C++ error :”XXX已经在 XXX.obj 中定义C/C++ 判断字符串是否为 utf-8 编码C/C++ svpng 将 RGBA 保存 png 图片C/C++ 使用 加载 png / jpg / gif / bmp等常用图片

3.5 国内中文镜像站免费使用啦