2014-11-04 35 views
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中。但是当我运行代码时,它给了我一个错误。任何人都可以告诉我我错了哪里?定位c中的数组中的颜色

+0

问题的标题没有描述问题。您应该更好地设置它,例如:*在循环*中出现错误或类似的东西。 – yulian 2014-11-04 00:50:05

回答

1

你有几个问题:

  • 你需要以不同的方式访问数组元素,是这样的:

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

    这将会将指针array衰减偏移z(行索引)乘以行长度加上c(列索引),然后der请参考它以获得元素,以便与color进行比较。

  • 您需要设置*x*y到行(z)和列(c)你发现了颜色,而不是本身的颜色。

  • 你错过了在你的内心for循环结束

  • 你只需要一个if检查是否已经找到了颜色,您可以在其中设置两个x梅开二度(})和y坐标

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

 if (*(array + z * cols + c) == color) 
     { 
      *x = c; 
      *y = z; 
      return 1; 
     } 
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. 
     } 
    } 
}