stb_image.h
是Sean Barrett的一个非常流行的单头文件图像加载库,它能够加载大部分流行的文件格式,并且能够很简单得整合到你的工程之中。
stb_image.h可以在https://github.com/nothings/stb下载。
解压后找到stb_image.h加入你的工程,并另创建一个新的C++文件,输入以下代码:
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
通过定义STB_IMAGE_IMPLEMENTATION
,预处理器会修改头文件,让其只包含相关的函数定义源码,等于是将这个头文件变为一个 .cpp 文件了。,现在只需要在你的程序中包含stb_image.h之后输入你的代码并编译就可以了。
要使用stb_image.h加载图片,我们需要使用它的stbi_load函数:
int width, height, nrChannels;
unsigned char *data = stbi_load("图片路径", &width, &height, &nrChannels, 0);
参数:
首先接受一个图像文件的位置作为输入(放入项目文件夹下只需要输入图片名称即可)。
接下来它需要三个int作为它的第二、第三和第四个参数,stb_image.h将会用图像的宽度、高度和颜色通道的个数填充这三个变量。我们生成纹理的时候会用到的图像的宽度和高度的。
应用:
因为我是用stbi_load来加载纹理图片的,所以这里举一个纹理的例子:
我们可以直接把上面得到的data用glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
生成纹理,可以看到之前定义并传入stbi_load的width和height在此使用。GL_UNSIGNED_BYTE就是data的数据类型在OpenGL中的标识。
最后:
释放图像的内存是一个很好的习惯stbi_image_free(data)
;。