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

标签 c++ image pixel devil

我正在使用 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 循环,它为图像中的所有像素打印给定像素处的 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]);
   }
}

关于c++ - 使用 DevIL 从图像中检索的像素数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9166143/

相关文章:

c++ - 无法更改私有(private)变量的内容

javascript - jquery 用 img 替换 span 并检查加载的 img

c++ - 模板参数提取和修改

c++ - 如何在 Ubuntu 14.04 的 QT Creator 中使用 Boost 库

c++ - 从大范围内生成一个随机数,除了大范围中间的较小范围

html - 如何轻松地在图像中间制作文字标题

image - 部署应用程序时Grails渲染插件失败

algorithm - 获取和设置像素亮度的通用算法?

java - 在 Java 中绘制像素图像

c++ - TTF_RenderTextSolid() 返回一个每像素 1 字节的 Surface?