操作相机的Preview
可通过以下三种方式添加回调接口:
Camera.setPreviewCallbackBuffer(PreviewCallback)
Camera.setOneShotPreviewCallback(PreviewCallback)
Camera.setPreviewCallback(PreviewCallback)
PreviewCallback
接口里面只有一个回调方法:
void onPreviewFrame(byte[] data, Camera camera);
其中的byte[] data
就是Preview
的图像数据,格式为YuvImage
,而这个图像天生是横着的,一般的旋转操作是:
YuvImage的byte[] –> Bitmap的byte[] –> 生成Bitmap –> 旋转Bitmap
示例代码
public void onPreviewFrame(byte[] data, Camera camera) {
final int width = camera.getParameters().getPreviewSize().width;
final int height = camera.getParameters().getPreviewSize().height;
// 通过YuvImage得到Bitmap格式的byte[]
YuvImage yuvImage = new YuvImage(data, ImageFormat.NV21, width, height, null);
ByteArrayOutputStream out = new ByteArrayOutputStream();
yuvImage.compressToJpeg(new Rect(0, 0, width, height), 100, out);
byte[] dataBmp = out.to