获取 stb_image 中像素的 RGB

Dev*_*Guy 3 c++ image

我创建并加载了这个图像:

int x, y, comps;
unsigned char* data = stbi_load(".//textures//heightMapTexture.png", &x, &y, &comps, 1);
Run Code Online (Sandbox Code Playgroud)

现在,我如何获得该图像某个像素的 RGB?

joh*_*n d 13

您正在使用每通道 8 位的接口。此外,您只请求一个通道(给 的最后一个参数stbi_load)。您不会仅请求一个通道就获得 RGB 数据。

如果您使用 rgb 图像,您可能会得到 3 或 4 个,comps并且您希望在最后一个参数中至少有 3 个。

data通过stbi_load返回缓冲器将containt 8比特* X * Y * channelRequested,或X * Y *信道计数字节。您可以这样访问 (i, j) 像素信息:

unsigned bytePerPixel = channelCount;
unsigned char* pixelOffset = data + (i + y * j) * bytePerPixel;
unsigned char r = pixelOffset[0];
unsigned char g = pixelOffset[1];
unsigned char b = pixelOffset[2];
unsigned char a = channelCount >= 4 ? pixelOffset[3] : 0xff;
Run Code Online (Sandbox Code Playgroud)

这样你就可以拥有你的 RGB(A) 每像素数据。