您的位置:首页 > 其它

正确显示竖屏预览和拍照的照片

2013-09-22 18:38 399 查看
1、预览时正确显示

主要参考系统相机代码实现getDisplayOritation就可以了

//在preview之前调用setDisplayOrientation

int degrees = getDisplayOritation(getDispalyRotation(), cameraId);

mCamera.setDisplayOrientation(degrees);

mCamera.startPreview();

getDisplayOritation函数如下:

private int getDisplayOritation(int degrees, int cameraId) {

Camera.CameraInfo info = new Camera.CameraInfo();

Camera.getCameraInfo(cameraId, info);

int result;

if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {

result = (info.orientation + degrees) % 360;

result = (360 - result) % 360;

} else {

result = (info.orientation - degrees + 360) % 360;

}

return result;

}

private int getDispalyRotation() {

int i = getWindowManager().getDefaultDisplay().getRotation();

switch (i) {

case Surface.ROTATION_0:

return 0;

case Surface.ROTATION_90:

return 90;

case Surface.ROTATION_180:

return 180;

case Surface.ROTATION_270:

return 270;

}

return 0;

}

2、显示图片时正确显示

竖屏拍照的照片,直接使用的话,会旋转90度

参考系统图库的代码,需要先查询mediascanner的orientation字段,然后应用再把角度旋转过来,这样显示就ok了

参考代码如下:

假设c为查询mediaprovider数据库返回的cursor

int rotation = c.getInt(c.getColumnIndex(MediaStore.Images.ImageColumns.ORIENTATION));

if (rotation != 0) {

Bitmap bitmap = BitmapFactory.decodeFile(path);

imageBefore.setImageBitmap(bitmap);

Matrix m = new Matrix();

m.setRotate(rotation);

Bitmap transformed = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), m, true);

return transformed;

}
http://asysbang.com/forum.php?mod=viewthread&tid=58&extra=page%3D1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: