11

Android画像のデータを使おうとしています。最終的にはグレースケールデータを使用するため、JPEG形式は好きではありません。前半はグレースケールなので、YUVフォーマットで大丈夫です。

Android開発チュートリアルから、

public final void takePicture(Camera.ShutterCallbackシャッター、Camera.PictureCallback raw、Camera.PictureCallback postview、Camera.PictureCallback jpeg)

APIレベル5で追加

非同期画像キャプチャをトリガーします。カメラサービスは、画像のキャプチャが進むにつれて、アプリケーションへの一連のコールバックを開始します。シャッターコールバックは、画像がキャプチャされた後に発生します。これを使用してサウンドをトリガーし、画像がキャプチャされたことをユーザーに知らせることができます。生のコールバックは、生の画像データが利用可能な場合に発生します(注:利用可能な生の画像のコールバックバッファーがない場合、または生の画像のコールバックバッファーが生の画像を保持するのに十分な大きさでない場合、データはnullになります)。ポストビューコールバックは、スケーリングされ、完全に処理されたポストビュー画像が使用可能な場合に発生します(注:すべてのハードウェアがこれをサポートしているわけではありません)。jpegコールバックは、圧縮された画像が利用可能なときに発生します。アプリケーションが特定のコールバックを必要としない場合は、コールバックメソッドの代わりにnullを渡すことができます。

「生画像データ」について語っています。しかし、生の画像データの形式に関する情報はどこにも見つかりませんか?あなたはそれについて何か考えがありますか?

写真で撮った写真のグレースケールデータを取得したいのですが、データは電話のメモリにあるので、画像ファイルの書き込み/読み取りや、異なる画像形式間の変換に時間をかける必要はありません。または多分私はそれを得るためにいくつかを犠牲にする必要がありますか?

4

3 に答える 3

12

いくつか検索した後、私は答えを見つけたと思います:Androidチュートリアルから:

「生のコールバックは、生の画像データが利用可能なときに発生します(注:利用可能な生の画像のコールバックバッファーがない場合、または生の画像のコールバックバッファーが生の画像を保持するのに十分な大きさでない場合、データはnullになります)。」

このリンクを参照してください(2011/05/10) Android:Raw画像コールバックがサポートされているデバイス すべてのデバイスがRawpictureCallbackをサポートしているわけではありません。

https://groups.google.com/forum/?fromgroups=#!topic/android-developers/ZRkeoCD2uyc(2009)Googleの従業員DaveSparksは次のように述べています。

「当初の目的は非圧縮のRGB565フレームを返すことでしたが、これは実用的ではないことがわかりました。」「そのAPIを完全に廃止し、ネイティブ信号処理用のフックに置き換える傾向があります。」

多くの人が同様の問題を報告しています。参照: http ://code.google.com/p/android/issues/detail?id = 10910

多くの画像処理プロセスはグレースケール画像に基づいているため、Androidによって各画像に対して生成されるメモリ内のグレースケール生データを楽しみにしています。

于 2013-01-16T18:08:35.787 に答える
4

getSupportedPictureFormats()で運が良かったかもしれません。YUV形式がリストされている場合は、setPictureFormat()と目的の解像度を使用でき、直感的にJpegPreviewコールバックで非圧縮の高品質画像を取得できます。この画像から、グレースケール(輝度)を簡単に抽出できます。

ほとんどのデバイスは、有効な選択肢としてJPEGのみをリストします。これは、カメラ側でハードウェアで圧縮を実行するためです。カメラからアプリケーションRAMへのデータ転送がボトルネックになることが多いことに注意してください。stagefright hw JPEGデコーダーを使用できる場合は、実際に結果をより速く取得できます。

于 2013-01-16T21:10:13.243 に答える
2

生のコールバックを使用する際の最大の問題は、多くの開発者が多くの電話で何かを返すのに問題があることです。

YUV配列だけに満足している場合は、カメラプレビューSurfaceViewを実装して、クラスにメソッドをPreviewCallback追加できます。onPreviewFrameこの機能により、フレームごとにYUVアレイに直接アクセスできます。必要に応じて取得できます。

SurfaceView編集:カスタムカメラプレビューサーフェス用に拡張したカスタムカメラアプリケーションを構築していると想定していたことを指定する必要があります。私のアドバイスに従うには、カスタムカメラを作成する必要があります。グレースケールを自分で実装するJPEGデータから新しいビットマップを作成することをお勧めしますが、物事をすばやく実行しようとしている場合。

于 2013-01-10T22:19:16.920 に答える