您的位置:首页 > 其它

关于自定义相机照片横竖屏转换问题的解决

2015-11-06 16:21 316 查看
在自定义相机中,横竖屏拍照时,其显示的图片与预览的时候方向不一致,有以下2种方法:

第一种:比较普遍,

/**
* 获取图片的旋转角度,有些系统把拍照的图片旋转了,有的没有旋转
*/
int degree = readPictureDegree(f.getAbsolutePath());

BitmapFactory.Options opts=new BitmapFactory.Options();//获取缩略图显示到屏幕上
opts.inSampleSize=2;
Bitmap cbitmap=BitmapFactory.decodeFile(f.getAbsolutePath(),opts);

/**
* 把图片旋转为正的方向
*/
Bitmap newbitmap = rotaingImageView(degree, cbitmap);
iv.setImageBitmap(newbitmap);


当然,在第一种的基础上,如果获取的degree一直为0,但照片角度还不对时,就要用到第二种方法:

//监听屏幕的方向
mScreenOrientationEventListener=new OrientationEventListener(this) {

@Override
public void onOrientationChanged(int orientation) {
// TODO Auto-generated method stub
// i的范围是0~359
// 屏幕左边在顶部的时候 i = 90;
// 屏幕顶部在底部的时候 i = 180;
// 屏幕右边在底部的时候 i = 270;
// 正常情况默认i = 0;

if(45 <= orientation && orientation < 135) {
screen = ExifInterface.ORIENTATION_ROTATE_180;
} else if(135 <= orientation && orientation < 225) {
screen = ExifInterface.ORIENTATION_ROTATE_270;
} else if(225 <= orientation && orientation < 315) {
screen = ExifInterface.ORIENTATION_NORMAL;
} else {
screen = ExifInterface.ORIENTATION_ROTATE_90;
}
}
};


holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if (camera != null) {
Camera.Parameters parameters = camera.getParameters();
/* 设置相片格式为JPEG */
parameters.setPictureFormat(PixelFormat.JPEG);

switch (screen) {
case 0:
parameters.setRotation(90);
break;
case 90:
parameters.setRotation(0);
break;
case 180:
parameters.setRotation(270);
break;
case 270:
parameters.setRotation(180);
break;
default:
break;
}
switch (screen) {
case 0:
camera.setDisplayOrientation(90);
break;
case 90:
camera.setDisplayOrientation(0);
break;
case 180:
camera.setDisplayOrientation(270);
break;
case 270:
camera.setDisplayOrientation(180);
break;
default:
break;
}

camera.startPreview();
}
}

@SuppressLint("NewApi")
@Override
public void surfaceCreated(SurfaceHolder holder) {

try {
camera = Camera.open();
// 设置camera预览的角度,因为默认图片是倾斜90度的
camera.setDisplayOrientation(90);
// 设置holder主要是用于surfaceView的图片的实时预览,以及获取图片等功能
camera.setPreviewDisplay(holder);
} catch (Exception e) {
if (camera != null) {
camera.release();
camera = null;
}
e.printStackTrace();
}
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (camera != null) {
camera.stopPreview();
camera.release();
camera = null;
}
}
});


通过以上方法,自定义相机图片旋转类似的问题基本都可以解决

有问题欢迎交流 QQ 2240405944
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  拍照图片旋转