打开usb摄像头拍照,把视频转成位图

很久不写博客了,这几年忙忘了,今天突然发现之前写的博客帮了不少需要的人,觉得还是比较有意思的,今天给大家一个干货,也是我们在开发过程中的问题,当我们做人脸识别或者vin码识别的时候,会发现如果你打开摄像头预览拍照成图片,然后用图片识别技术,这样手机会闪一下或者暂停一下,还有当我们发动态视频的时候,视频的封面用什么显示,微信也是如此,这问题其实也很简单,只需要在我们视频预览的时候获取第一祯就可以解决!

第一步打开摄像头预览

public Camera getCamera() {
    if (mCamera == null) {
        try {
            boolean connected = false;
            for (int camIdx = 0; camIdx < getNumberOfCameras(); ++camIdx) {
                try {
                    mCamera = Camera.open(camIdx);
                    connected = true;
                } catch (Exception e) {
                    Log.e("TAG", "请检查摄像头!");
                }
                if (connected) break;
            }
        } catch (Exception e) {
            mCamera = null;
        }
    }
    return mCamera;
}

第二步 

Camera.Size previewSize = mCamera.getParameters().getPreviewSize();//获取尺寸,格式转换的时候要用到
Bitmap bitmap=nv21ToBitmap(picData, previewSize.width, previewSize.height);
/**
 * 视频祯转成位图
 *
 * @param nv21
 * @param width
 * @param height
 * @return
 */
private static Bitmap nv21ToBitmap(byte[] nv21, int width, int height) {
    Bitmap bitmap = null;
    try {
        YuvImage image = new YuvImage(nv21, ImageFormat.NV21, width, height, null);
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        image.compressToJpeg(new Rect(0, 0, width, height), 40, stream);
        bitmap = BitmapFactory.decodeByteArray(stream.toByteArray(), 0, stream.size());
        stream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return bitmap;
}

/**

转成二进制流

**/

public static String bitmapToBase64(Bitmap bitmap) {

//        Log.e("yangfan","bitmap1 = "+bitmap);

        // 要返回的字符串
        String reslut = null;

        ByteArrayOutputStream baos = null;

        try {

            if (bitmap != null) {

                baos = new ByteArrayOutputStream();
                /**
                 * 压缩只对保存有效果bitmap还是原来的大小
                 */
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);

//                Log.e("yangfan","bitmap2 = "+bitmap);

                baos.flush();
                baos.close();
                // 转换为字节数组
                byte[] byteArray = baos.toByteArray();

                // 转换为字符串
                reslut = Base64.encodeToString(byteArray, Base64.DEFAULT);
            } else {
                return null;
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

            try {
                if (baos != null) {
                    baos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
        return reslut;

    }

猜你喜欢

转载自blog.csdn.net/qq_30423365/article/details/88173722