c++ 获取stb_image中像素的RGB

wpx232ag  于 2023-01-10  发布在  其他
关注(0)|答案(1)|浏览(180)

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

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

现在,我如何得到这张图像中某个像素的RGB值?

atmip9wb

atmip9wb1#

您使用的是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 + x * 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)每像素数据。

相关问题