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

C++ 使用DevIL从图像检索的像素数据,c++,image,pixels,devil,C++,Image,Pixels,Devil,我使用Visual Studio 2010,C++。 我要做的是从加载的图像中检索像素数据(特别是RGB颜色),然后在各种检查中使用。目前,我希望循环浏览所有数据,并能够检测像素何时为特定颜色(特定的R、G和B值) 我应该注意的是,我正在使用DevIL,我更愿意继续使用DevIL(我已经看到了一些关于使用其他有助于图像处理的工具的建议) 现在,据我所知,DevIL函数ilgetData()检索一个指针,该指针包含一维字节数组中所有像素的所有RGB值。我不知道如何存储使用此函数获得的数据,然后在f

我使用Visual Studio 2010,C++。 我要做的是从加载的图像中检索像素数据(特别是RGB颜色),然后在各种检查中使用。目前,我希望循环浏览所有数据,并能够检测像素何时为特定颜色(特定的R、G和B值)

我应该注意的是,我正在使用DevIL,我更愿意继续使用DevIL(我已经看到了一些关于使用其他有助于图像处理的工具的建议)

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


非常感谢示例代码。

存储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(int i=0;i
您可能需要的是一个for循环,用于打印图像中所有像素的给定像素处的RGB值或执行其他操作。正如巴特指出的,下面的顺序是针对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]);
   }
}
i单元宽度、高度;
宽度=ilGetInteger(IL\u图像\u宽度);
高度=ilGetInteger(ILU图像高度);
对于(int i=0;i
存储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(int i=0;i
您可能需要的是一个for循环,用于打印图像中所有像素的给定像素处的RGB值或执行其他操作。正如巴特指出的,下面的顺序是针对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]);
   }
}
i单元宽度、高度;
宽度=ilGetInteger(IL\u图像\u宽度);
高度=ilGetInteger(ILU图像高度);
对于(int i=0;i
非常感谢您的支持。你已经差不多解决了一周来找我的问题。非常感谢代码示例。再次感谢,非常感谢。你已经差不多解决了一周来找我的问题。非常感谢代码示例。再次感谢。