2017-12-25 13 views
0

私はこのコードを持っている:私は、ビットマップを印刷するときByteArrayをImageMetaData()からBitmapに変換するにはどうすればよいですか?

Frame frame = mSession.update(); 
Camera camera = frame.getCamera(); 
... 
bytes=frame.getImageMetadata().getByteArray(0); 
System.out.println("Byte Array "+frame.getImageMetadata().getByteArray(0)); 
Bitmap bmp = BitmapFactory.decodeByteArray(bytes,0,bytes.length); 
System.out.println(bmp); 

、私はnullオブジェクトを取得します。私はカメラから画像を取得しようとしている、それは私がビットマップにbyteArrayを変換しようとしている理由です。別の方法がある場合は、それも役に立ちます。

ありがとうございます。

答えて

0

ImageMetaDataは、背景イメージを記述しますが、イメージ自体は実際には含まれません。

背景イメージをビットマップとしてキャプチャする場合は、FrameBufferObjectを使用してイメージをバイト配列にコピーするcomputervisionサンプルを参照する必要があります。

0

私は似たような試みをしました。できます。しかし、私は誰もこの方法を試すことをお勧めしません。ネストされたループのために時間がかかります。

CameraImageBuffer inputImage; 

final Bitmap bmp = Bitmap.createBitmap(inputImage.width, inputImage.height, Bitmap.Config.ARGB_8888); 
int width = inputImage.width; 
int height = inputImage.height; 
int frameSize = width*height; 

// Write Bytebuffer to byte[] 
byte[] imageBuffer= new byte[inputImage.buffer.remaining()]; 
inputImage.buffer.get(imageBuffer); 

int[] rgba = new int[frameSize]; 
for (int i = 0; i < height; i++){ 
    for (int j = 0; j < width; j++) { 
     int r =imageBuffer[(i * width + j)*4 + 0]; 
     int g =imageBuffer[(i * width + j)*4 + 1]; 
     int b =imageBuffer[(i * width + j)*4 + 2]; 
     rgba[i * width + j] = 0xff000000 + (b << 16) + (g << 8) + r; 
    } 
} 
bmp.setPixels(rgba, 0, width , 0, 0, width, height); 

バイトバッファはrgbaバッファに変換され、Bitmapに書き込まれます。 CameraImageBufferは、computervisionサンプルアプリケーションで提供されるクラスです。

関連する問題