我创建并加载了这张图片:
int x, y, comps;
unsigned char* data = stbi_load(".//textures//heightMapTexture.png", &x, &y, &comps, 1);
现在,我该如何获取这张图片某个像素的RGB值?
您正在使用每通道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)数据。
(i + y * j) * bytePerPixel
。图像的一行有x
个像素,要往下跳j
行,需要跳过j*x
个像素,因此正确的偏移量应该是(i + x * j) * bytePerPixel
。 - derhass