使用DevIL从图像中检索的像素数据

Roh*_*hit 0 c++ image pixels devil

我正在使用Visual Studio 2010,C++.

我要做的是从加载的图像中检索像素数据(特定于RGB颜色),然后在各种检查中使用它.目前,我想循环遍历所有数据,并能够检测像素何时是某种颜色(特定的R,G和B值).

我应该注意到我正在使用DevIL,我更喜欢继续使用DevIL(我已经看到了一些建议,可以帮助处理图像处理的其他工具).

现在,据我所知,DevIL函数ilgetData()检索一个指针,该指针包含一维字节数组中所有像素的所有RGB值.我不知道如何存储使用此函数获取的数据,然后在for循环中使用它.

示例代码非常感谢.

App*_*234 5

存储ilGetData()返回的正确方法是在IL无符号字节数组中.

例如

ILubyte * bytes = ilGetData();
Run Code Online (Sandbox Code Playgroud)

要在for循环中迭代它,你可以使用它

  for(int i = 0; i < size; i++)
  {
    // Print out each ILubyte one at time
    printf("%d\n", bytes[ i ]);
  }
Run Code Online (Sandbox Code Playgroud)

你可能想要的是一个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]);
   }
}
Run Code Online (Sandbox Code Playgroud)