在stb_image中获取像素的RGB

时间:2018-01-12 23:29:42

标签: c++ image

我创建并加载了这张图片:

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

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

1 个答案:

答案 0 :(得分:3)

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

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

stbi_load返回的data缓冲区将包含8bits * x * y * channelRequested或x * y * channelCount字节。 你可以这样访问(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;

这样你可以获得每像素RGB(A)数据。