好轮子收藏:一个支持几乎所有流行格式的图像加载库stb_image.h

34 篇文章 4 订阅
24 篇文章 5 订阅

是在opengl教程网站上看到的,挺好用。

stb_image.h一个非常流行的单头文件图像加载库,它能够加载大部分流行的文件格式,并且能够很简单得整合到你的工程之中。

下载地址:stb/stb_image.h at master · nothings/stb · GitHub

只有一个头文件,将它加入你的工程,并另创建一个新的C++文件,输入以下代码:

#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"

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

int width, height, nrChannels;
unsigned char *data = stbi_load("container.jpg", &width, &height, &nrChannels, 0);

这个函数首先接受一个图像文件的位置作为输入。接下来它需要三个int作为它的第二、第三和第四个参数,stb_image.h将会用图像的宽度高度颜色通道的个数填充这三个变量。我们之后生成纹理的时候会用到的图像的宽度和高度的。

使用例子

其他的一些功能:

//翻转y轴
stbi_set_flip_vertically_on_load(true);

C++中,结合使用SDL和stb_image.h来处理图像加载和渲染的基本步骤如下: 1. 安装和配置SDL:确保你的开发环境已经安装了SDL2,并且配置好头文件和文件路径,以便在项目中可以引用和链接SDL。 2. 包含stb_image.h:stb_image.h是一个单文件的图像加载,可以从网上下载stb_image.h文件并将其放到你的项目目录中,然后在你的源代码文件中包含它。 3. 使用stb_image.h加载图像:使用stb_image.h提供的函数stbi_load来加载图像。这个函数会返回一个指向图像数据的指针。你需要为这个函数提供图像文件的路径以及希望加载图像的颜色通道数。 4. 创建SDL的Surface和Texture:使用SDL的函数SDL_CreateRGBSurfaceFrom来创建一个Surface,其中包含了stb_image加载图像数据。然后,使用SDL_CreateTextureFromSurface函数从这个Surface创建一个Texture。 5. 渲染图像:创建一个SDL Renderer,然后使用SDL_RenderCopy或者SDL_RenderCopyEx函数将Texture绘制到屏幕上。 6. 清理资源:在加载和渲染图像之后,需要使用SDL_FreeSurface和SDL_DestroyTexture来释放相应的资源。 下面是这些步骤的代码示例: ```cpp #include <SDL.h> #define STB_IMAGE_IMPLEMENTATION #include "stb_image.h" int main(int argc, char* argv[]) { // 初始化SDL if (SDL_Init(SDL_INIT_VIDEO) < 0) { // 错误处理 } // 加载图像 int width, height, channels; stbi_set_flip_vertically_on_load(true); // 如果需要,可以设置垂直翻转图像 unsigned char* pixels = stbi_load("path/to/image.jpg", &width, &height, &channels, 0); if (!pixels) { // 错误处理 } // 创建SDL Surface SDL_Surface* surface = SDL_CreateRGBSurfaceFrom( pixels, width, height, channels * 8, width * channels, 0x000000FF, 0x0000FF00, 0x00FF0000, (channels == 4) ? 0xFF000000 : 0 ); // 创建SDL Texture SDL_Texture* texture = SDL_CreateTextureFromSurface(SDL_GetRenderer(window), surface); // 清理stb_image.h使用的资源 stbi_image_free(pixels); // ... 渲染图像的代码 ... // 清理资源 SDL_DestroyTexture(texture); SDL_FreeSurface(surface); SDL_Quit(); return 0; } ``` 在使用这段代码之前,请确保你已经正确设置了SDL环境,并且有正确的图像文件路径。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值