我有这段代码:
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);
当我打印Bitmap时,我得到一个null对象。我试图从相机中获取图像,这就是我尝试将byteArray转换为Bitmap的原因。如果有另一种方式,它也会有所帮助。
谢谢。
答案 0 :(得分:0)
ImageMetaData描述背景图像,但实际上并不包含图像本身。
如果要将背景图像捕获为位图,则应查看使用FrameBufferObject的computervision示例将图像复制到字节数组。
答案 1 :(得分: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);
Bytebuffer转换为rgba缓冲区,并写入Bitmap。 CameraImageBuffer是computervision示例应用程序中提供的类。
答案 2 :(得分:0)
您可能无法使用图像元数据获取位图。使用以下方法。使用表面视图渲染的onDrawFrame
覆盖方法。
@Override public void onDrawFrame(GL10 gl) {
int w = 1080;
int h = 1080;
int b[] = new int[w * (0 + h)];
int bt[] = new int[w * h];
IntBuffer ib = IntBuffer.wrap(b);
ib.position(0);
GLES20.glReadPixels(0, 0, w, h, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, ib);
for (int i = 0, k = 0; i < h; i++, k++) {
for (int j = 0; j < w; j++) {
int pix = b[i * w + j];
int pb = (pix >> 16) & 0xff;
int pr = (pix << 16) & 0x00ff0000;
int pix1 = (pix & 0xff00ff00) | pr | pb;
bt[(h - k - 1) * w + j] = pix1;
}
}
Bitmap mBitmap = Bitmap.createBitmap(bt, w, h, Bitmap.Config.ARGB_8888);
runOnUiThread(new Runnable() {
@Override public void run() {
image_test.setImageBitmap(resizedBitmap);
}
});
}