最近在写自己的渲染器,想使用学习opengl的时候使用的这个stb_image.h
首先。
int width, height, nrChannels;
unsigned char *data = stbi_load("container2.png", &width, &height, &nrChannels, 0);
这个函数首先接受一个图像文件的位置作为输入。接下来它需要三个int作为它的第二、第三和第四个参数,stb_image.h将会用图像的宽度、高度和颜色通道的个数填充这三个变量。我们之后生成纹理的时候会用到的图像的宽度和高度的
现在,我如何获得此图像某个像素的RGB?
stbi_load返回的data缓冲区将包含8bits * x * y * channelRequested或x * y * channelCount字节。
unsigned bytePerPixel = nrChannels;
for(int y=0;y<height;y++)
{
for(int x=0;x<width;x++)
{
unsigned char* pixelOffset = data + (x + y * width) * bytePerPixel;
unsigned char r = pixelOffset[0];
unsigned char g = pixelOffset[1];
unsigned char b = pixelOffset[2];
unsigned char a = nrChannels >= 4 ? pixelOffset[3] : 0xff;
cout<<(int)r<<" "<<(int)g<<" "<<(int)b<<" "<<(int)a<<endl;
}
}
stbi_image_free(data);
return 0;
}
来吧! 试试看!