私はこの回答が少し遅れたことを認識していますが、カメラで作業している間に過去1ヶ月で学んだことがあります。あなたはonPictureTakenまたはを経由して生の画像データを受信機かどうか
onPreviewFrameそれはsereral異なるフォーマット(android.graphics.ImageFormat)でエンコードされてくることができます。ユニバーサルサポートが保証されている唯一のものはNV21で、YV12はハニカムから普遍的にサポートされています。普遍的にサポートされていることに加えて、NV21は、あなたがやろうとしていること(黒と白に変換)に非常によく合うかもしれません。 NV21はYUVフォーマットで、Yチャネルは輝度情報を、UチャネルとVチャネルは色情報を伝送します。あるとしてRGB変換(非常に効率的ではありません>
http://en.wikipedia.org/wiki/YUV
http://www.fourcc.org/fccyvrgb.php
http://www.fourcc.org/yuv.php#NV21
ウィキリンクNV21-を実現するサンプルソースを持っていますが、良いアイデアを与える:ここより正式な説明は参照してください。一般的方法)。この変換をCやアセンブリで行うことに興味があれば、これは情報の良い出典でした(警告:NV21用のコードはありません。それにもかかわらず、.Sファイルをndkプロジェクトに組み込む方法を示しています。実際には簡単です。 B/Wへの変換 - 戻るあなたの質問に
http://www.roman10.net/effective-color-conversion-yuv-rgb-in-android-in-assembly/
。単にYチャンネルを取り、RGBトリプルを[Y、Y、Y]として作成すると、白黒画像が得られます。または、L8イメージを単純に作成することもできます(例:Y→L)。
PS。 RGBへの変換中にYUV値の範囲/スケーリングに関して混乱が大きくなります。カメラのデータがフルスイング(0-255、16-235または16-240ではなく)で、マトリックス乗算後の結果を0-255に固定すると視覚的に満足できる結果が得られ、0-255の歪み色(言うまでもなく、16-240などの他の範囲に拡大してもこれは当てはまります)。これらの観察は、上記のリンクで説明されている完全な変換手順のより細かい部分に反するように見えますが、それが機能することがわかりました。
あなたは 'onPictureTaken'使用する必要があるか、プレビューコールバック、' onPreviewFrame'を使用することができますか? –
これは、プレビュー中にイメージを処理する必要はありません。渡されるパラメータの違いは何ですか? – Vitaly
'onPictureTaken'はJPGイメージを渡し、' onPreviewFrame'は生のYUVデータを渡します。 –