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ます。

  • 色自体ではなく、色を見つけた行 ( ) と列 ( ) に and*xを設定する必要があります。*yzc

  • }内側のforループの最後に中括弧 ( ) がありません

  • と座標ifの両方を設定できる色を見つけたことを確認するために必要なのは 1 つだけです。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 配列は 1 次元配列です。次のような 2 次元配列を期待していると思います。

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 に答える