Kong Jing

平板的摄像头预览界面处理细节

31 August 2016

Size localSize = getOptimalPreviewSize( parameters.getSupportedPreviewSizes(), previewW, previewH);

设置预览的界面分辨率的时候,选择最佳的不一定合适,横屏的1064*600可能是从左下角,也就是竖屏的(0,0)开始画界面的。 所以我如果要画一个800 x 600的横屏预览界面,摄像头已知能够处理的分辨率是640 x 480 和 480 x 640比较合适,那么就要选择480 x 640的分辨率设置预览界面。

parameters .setPreviewSize(previewW, previewH) ;//480*640
        List<Size> pictureSizes = parameters.getSupportedPictureSizes();   


拍摄的照片的分辨率的设置

if (activity. caremaId == 1 ) {//判断摄像头的方向
    bitmap = com.util.ImgUtil. zoomBitmap(Utils. rotateBitmap(- 90, bitmap) ,240, 320);
} else {
    bitmap = zoomAndCutBitmap(com.util.ImgUtil. zoomBitmap(Utils. rotateBitmap( 90, bitmap),240 ,320)) ;
}

获取了拍摄照片或者选取相册的bitmap之后,根据前置与后置摄像头的区别,进行旋转摄像头

public static Bitmap rotateBitmap( int degree, Bitmap bitmap) {
            Matrix matrix = new Matrix() ;
            matrix.postRotate( degree) ;
Bitmap bm = Bitmap. createBitmap(bitmap , 0, 0, bitmap.getWidth() ,bitmap.getHeight(), matrix , true);
       bm = convertBmp(bm) ;
            return bm ;
}

对于bitmap再进行缩放的操作

public staticBitmapzoomBitmap(Bitmap bitmap, intw, inth) {
        Bitmap newbmp = null;
        if (bitmap != null) {
            intwidth = bitmap.getWidth();
            intheight = bitmap.getHeight();
            if (width < w && height < h)
                returnbitmap;// 不进行放大操作
            Matrix matrix = newMatrix();
            floatscaleWidht = ((float) w / width);/// 940/1922
            floatscaleHeight = ((float) h / height);
            if (scaleWidht > scaleHeight)
                matrix.postScale(scaleHeight, scaleHeight);
            else
                matrix.postScale(scaleWidht, scaleWidht);
            newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
        }
        return newbmp;
    }

对于前置摄像头,由于出现了新的情况(水平镜像反转了)

public static Bitmap zoomAndCutBitmap(Bitmap bitmap) {
     int w = bitmap.getWidth();
     int h = bitmap.getHeight() ;
     Bitmap newbmp = null;
     Matrix matrix = new Matrix();
     matrix.postScale(- 1, 1 );   //镜像水平翻转
     newbmp = Bitmap. createBitmap(bitmap , 0, 0,w ,h,matrix,true) ;
     return newbmp ;
 }

图片拍摄拍摄完获取的是640 x 480,—-拍摄的时候设置320 x 240,图片会发生拉伸,在同样都是4:3的情况下,不应该会发生这样的情况,所以设置的图片大小是640 x 480,然后 在拍摄之后旋转图片完成后,进行图片的压缩,减小图片占用内存的空间大小。 设置图片为240 x 320,拍摄的图片由于会发生旋转,所以从320 x 240调整为240 x 320的大小

— Kong Jing