更新:デバイスのベンダーに連絡して、平面4:2:0のYUVフルを使用していることを知らせました大規模なピクセル形式です。研究の結果、YUV 4:2:0:I420、J420、YV12の3つの主要フォーマットがあるように見えました。 私のコードを実行しているときに、このイメージ形式の定数は、アンドロイドYuvImageクラスであったので、私はしかし、私は次の例外だ興奮していた。その私の後..まあ残念厥YUVフルスケールピクセルフォーマット
java.lang.IllegalArgumentException: only support ImageFormat.NV21 and ImageFormat.YUY2 for now
を
IはNV21のピクセルフォーマットの画像に示すような2色プレーンをインターリーブするためにいくつかの簡単な関数を書くことを試みた:YUV420とNV21の違いについて学びました。
public static void convertYUY420ToNV21(byte[] data_yuv420, byte[] data_yuv_N21) {
int idx = (int) (data_yuv_N21.length * (2.0f/3.0f));
int j = idx;
int chroma_plane_end = (int) (idx + ((data_yuv_N21.length - idx)/2));
for (int i = idx; i < chroma_plane_end; i++) {
data_yuv_N21[j] = data_yuv420[i];
j += 2;
}
j = idx + 1;
for (int i = chroma_plane_end; i < data_yuv_N21.length; i++) {
data_yuv_N21[j] = data_yuv420[i];
j += 2;
}
しかし、結果は私が考えていた 一つの可能な理由は、バイト配列(1843200)の大きさだった...まだ私の元のコードと同じようです。 YUV420の場合、1ピクセルの深度は12ビットです。カメラの解像度は1280x720で、921,600ピクセルまたは1,382,400バイトです。これは、実際のバイト配列サイズの1/3です。私は飛行機の間にいくつかのパディングがあるかもしれないと読んだが、私はそれについて調べる方法に固執している。
YuvImageクラスには、そのコンストラクタにstridesパラメータがありますが、アンドロイドデベロッパーのドキュメントを読んだ後でも、どのように使用するかはわかりません。
手がかりはありますか?
オリジナルポスト:
私は次のような問題を抱えている:私は使用されているカメラや画像フォーマットの種類に提供する情報がないデバイスのカメラにアクセスしようとしています。提供される唯一の情報は、ビデオストリーム出力を含むバイト配列を取り出す方法です。 しかし、解像度は1280x720で、バイト配列のサイズは1843200です。私はグーグルでYUYVなどのピクセル形式を使って正確に同じサイズとサイズのカメラを見つけました。
ByteArrayOutputStream out = new ByteArrayOutputStream();
YuvImage yuv = new YuvImage(data, ImageFormat.YUY2, 1280, 720, null);
yuv.compressToJpeg(new Rect(0, 0, 1280, 720), 100, out);
byte[] bytes = out.toByteArray();
bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
if (bitmap != null) {
ImageView cameraImageView = (ImageView) findViewById(R.id.imageView);
cameraImageView.setImageBitmap(bitmap);
}
をカラーチャンネルに関連する何かおそらく、BitmapFactory.decodeByteArray機能が有効なビットマップを返されたが、それを表示するとき、私は画像が緑の色合いや紫の斑点を持つ見た:私は以下のコードを書いたその知識に基づいて ? サンプル画像:
使用されている正確なピクセル形式/エンコーディングを見つける方法はありますか?私は他のものをここから試してみるべきか分からない。 アドバイスありがとうございます、ありがとう!
最も一般的なYUV422カメラフォーマットはUYVYです。 –
http://rawpixels.netで始まり、カメラから取得したバッファの実際のフォーマットを確認してください。 –
あなたのリンクが私を助けました!彼らは私に間違った情報を与えました。実際にはRGB565形式のRGBA形式でした。あなたは私の問題を解決しましたが、私は受け入れられた回答としてコメントをタグ付けできないと思いますか?=/ – Unfixable