法,已经可以在不显示预览的情况下获取到数据帧,并打上极为精确的生成时间截,这对于需要精确计算时间的程序来说是非常有用的。当然是用SurfaceTexture也可以将预览图像显示出来,你可以开一个线程专门来做这件事,而不是在onPreviewFrame中完成。下面提供一段显示预览图像的参考代码:
try {
? ? YuvImage image = new YuvImage(data, ImageFormat.NV21,
? ? ? ? ? ? WIDTH_COLLECT, HEIGHT_COLLECT, null);
? ? if (image != null) {
? ? ? ? ByteArrayOutputStream stream = new ByteArrayOutputStream();
? ? ? ? image.compressToJpeg(new Rect(0, 0, WIDTH_COLLECT,
? ? ? ? ? ? ? ? HEIGHT_COLLECT), 100, stream);
? ? ? ? Bitmap bm = BitmapFactory.decodeByteArray(
? ? ? ? ? ? ? ? stream.toByteArray(), 0, stream.size());
? ? ? ? stream.close();
? ? ? ? Canvas canvas = previewHolder.lockCanvas();
? ? ? ? canvas.drawBitmap(bm, 0, 0, null);
? ? ? ? previewHolder.unlockCanvasAndPost(canvas);
? ? }
} catch (Exception e) {
? ? // TODO: handle exception
}
previewHolder就是要显示预览数据的SurfaceView的SurfaceHolder,当然你要可以加上synchronized同步机制。
Demo就没有上传了,如果有什么问题可以直接留言讨论。