4

私はAndroid用の拡張現実アプリに取り組んでいます。Tom Gibaraのキャニーエッジ検出器クラスを実装しており、AndroidでサポートされていないBufferedImageをBitmapに置き換えました。

メソッド「follow」(以下に投稿)は、StackOverflowエラーを引き起こしています。これは再帰関数ですが、私を困惑させるのは、デバイス上でクラッシュする前に約10〜15秒間正しく機能することです。

Googleからは、このクラスはJavaで正常に実装されているように見えますが、何らかの理由でAndroidでは機能しないのではないかと思います。ギバラのコードは、シングルスレッド専用であることを指定しています。これは問題の一部でしょうか?そうでない場合、私のエラーは誰にでも明らかですか?

ありがとうございました!

private void follow(int x1, int y1, int i1, int threshold) {  
    int x0 = x1 == 0 ? x1 : x1 - 1;  
    int x2 = x1 == width - 1 ? x1 : x1 + 1;  
    int y0 = y1 == 0 ? y1 : y1 - 1;  
    int y2 = y1 == height -1 ? y1 : y1 + 1;

    data[i1] = magnitude[i1];  
    for (int x = x0; x <= x2; x++) {  
        for (int y = y0; y <= y2; y++) {  
            int i2 = x + y * width;  
            if ((y != y1 || x != x1) && data[i2] == 0 
                    && magnitude[i2] >= threshold) {  
                follow(x, y, i2, threshold);  
                return;  
            }  
        }  
    }  
}
4

1 に答える 1

1

Androidのデフォルトのスレッドスタックは、デスクトップで得られるものよりもはるかに小さいです。現在のAndroidビルド(2.3)では、スタックサイズは12kBに設定されていると思います。あなたの再帰は単に深すぎます。

于 2011-01-31T19:47:19.253 に答える