1

バックグラウンド

ある時点で巨大なビットマップがあり、顔検出を使用する必要があるアプリを開発しているので、FaceDetector APIを使用します

問題

顔検出 API には、入力ビットマップに関する制限があります。

  1. ビットマップ構成は Config.RGB_565 でなければなりません (ここに書かれています)
  2. ビットマップの幅は偶数でなければなりません (ここに書かれています)

私がしたこと

後で元のビットマップが必要になるため、ファイルに保存しました。

その直後に、元のビットマップをリサイクルし、ファイルから一時的なビットマップをロードして、正しい構成を持っていますが、悲しいことに、偶数幅を使用する必要があるため、常に機能するとは限りません。均一な幅。

顔検出 API に幅として "width-1" を使用するように指示しようとしましたが、うまくいきませんでした。「java.lang.IllegalArgumentException: ビットマップ サイズが初期化と一致しません」と表示されました。なぜこのような奇妙な幅の制限が必要なのか、ビットマップが既にある場合に幅と高さのパラメーターが必要なのか、私には理解できません...

質問

私は何をすべきか?

奇数幅のビットマップで動作させ、ピクセルの列全体を無視することは可能ですか?

これを尋ねる理由は、ビットマップが非常に大きいためです。同じようなサイズ (幅が均等) の新しいビットマップに複製すると、一部のデバイスで OOM を簡単に取得できます。

JNIを使​​用してスケーリングできることはわかっていますが(以前に書いた投稿と同様に、こちら)、同じことを達成するための、よりハードコアではないより良い方法を見つけられることを願っています。

他に方法がない場合は、Android に役立つ JNI 関数があるのではないでしょうか?

4

1 に答える 1