0
int locate_color(  const uint8_t array[], 
           unsigned int cols, 
           unsigned int rows,
           uint8_t color,
           unsigned int *x,
           unsigned int *y )
{
    for (int z = 0; z < rows; z++)
    {
        for (int c = 0; c < cols; c++)
        { 
            if (array[z] == color)
            {
                *x = color;
            }
            if (array[c] == color)
            {
                *y = color;
            }
            return 1;
    }
    return 0;
}

此函数是从数组中定位颜色的函数。它从左到右,从上到下搜索,找到后将坐标存储到*x和*y中。但是当我运行代码时,它给了我一个错误。谁能告诉我我哪里出错了?

4

2 回答 2

1

你有几个问题:

  • 您需要以不同的方式访问数组元素,例如:

    if (*(array + z * cols + c) == color)
    

    这将使指针array衰减到z(行索引)乘以行的长度加上c(列索引),然后取消引用它以获取要比较的元素color

  • 您需要将*xand设置*y到您找到颜色的行 ( z) 和列 ( c),而不是颜色本身。

  • 您在内循环}的末尾缺少一个大括号 ( )for

  • 您只需要if检查您是否找到了颜色,您可以在其中设置xy坐标

假设在每一行的末尾没有额外的填充,并且每个像素是 8 位,那么你的内部 for 循环的内容将是:

        if (*(array + z * cols + c) == color)
        {
            *x = c;
            *y = z;
            return 1;
        }
于 2014-11-04T01:01:42.230 回答
0

const uint8_t 数组是一维数组。我相信您期望一个二维数组,如下所示:

array[z][c];

for (int z = 0; z < rows; z++)
{
    for (int c = 0; c < cols; c++)
    { 
        if (array[z][c] == color)
        {
            *x = color;
            *y = color;
            return 1;   // return 1 only if you find the matching color.
        }  
    }
}
于 2014-11-04T00:42:46.953 回答