存储 ilGetData() 返回的正确方法是在 IL 无符号字节数组中。
例如
ILubyte * bytes = ilGetData();
要在 for 循环中迭代它,您可以使用
for(int i = 0; i < size; i++)
{
// Print out each ILubyte one at time
printf("%d\n", bytes[ i ]);
}
您可能想要的是一个 for 循环,它为图像中的所有像素在给定像素的 RGB 值处打印或执行其他操作。正如 Bart 指出的,下面的排序是针对 IL_RGBA 或 RGBA 格式的。如果使用 IL_RGB,则 4 变为 3,如果使用 IL_BGR 或 IL_BGRA,则需要按预期切换红色和蓝色值。
ILuint width,height;
width = ilGetInteger(IL_IMAGE_WIDTH);
height = ilGetInteger(IL_IMAGE_HEIGHT);
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
printf( "%s\n", "Red Value for Pixel");
printf( "%d\n", bytes[(i*width + j)*4 + 0]);
printf( "%s\n", "Green Value for Pixel");
printf( "%d\n", bytes[(i*width + j)*4 + 1]);
printf( "%s\n", "Blue Value for Pixel");
printf( "%d\n", bytes[(i*width + j)*4 + 2]);
}
}