获取stb_image中像素的RGB值

3

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

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

现在,我该如何获取这张图片某个像素的RGB值?
1个回答

16

您正在使用每通道8比特的接口。此外,您仅请求了一个通道(传递给 stbi_load 的最后一个参数)。只请求一个通道将无法获取RGB数据。

如果您在使用RGB图像,则可能会得到3或4个通道,并且您希望在最后一个参数中至少获得3个通道。

stbi_load返回的data缓冲区将包含8位 * 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)数据。


1
你的偏移量计算是错误的:(i + y * j) * bytePerPixel。图像的一行有 x 个像素,要往下跳 j 行,需要跳过 j*x 个像素,因此正确的偏移量应该是 (i + x * j) * bytePerPixel - derhass

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接