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)) ;
}
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 ;
}
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