2013-10-01 10:53来源:武汉北大青鸟光谷校区作者:武汉北大青鸟
武汉北大青鸟光谷校区android培训课程技术专栏会为大家陆续奉上相关技术文章,下面是关于android camera 竖直拍照 获取竖直方向照片的相关技术内容,请欣赏。
根据需求,一般分为预览时竖直和拍照后得到竖直方向的照片
一、拍照时竖直预览:
实现原理①:设置拍照的Activity为横屏
实现①:在AndroidManifest.xml相应的activity添加一句android:screenOrientation="landscape"
缺点:Activity设置为横屏之后,上面的按钮等相应的也会旋转。
实现原理②:设置预览效果为竖直方向
实现②:在Camera对象初始化之后,设置Camera对象为竖直预览
代码:
[java] view plaincopy
private void setDisplayOrientation(){
int rotation = getWindowManager()
.getDefaultDisplay().getRotation();
int degree = 0;
switch (rotation) {
case Surface.ROTATION_0: degree = 0; break;
case Surface.ROTATION_90: degree = 90; break;
case Surface.ROTATION_180: degree = 180; break;
case Surface.ROTATION_270: degree = 270; break;
}
int result;
CameraInfo info = new CameraInfo();
Camera.getCameraInfo(0, info);
if(info.facing == CameraInfo.CAMERA_FACING_FRONT){
result = (info.orientation + degree) % 360;
result = (360 - result) % 360;
}else{
result =(info.orientation - degree + 360 ) % 360;
}
myCamera.setDisplayOrientation(result);
//这里的myCamera就是已经初始化的Camera对象
}
二、得到竖直方向的照片:
实现原理:将拍照回调函数得到的Byte[]数组转化为BitMap对象,再对BitMap对象进行旋转处理
实现:贴上源代码吧
[java] view plaincopy
@Override
public void onPictureTaken(byte[] data, Camera camera) {
//将得到的照片进行270°旋转,使其竖直
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
Matrix matrix = new Matrix();
matrix.preRotate(270);
bitmap = Bitmap.createBitmap(bitmap ,0,0, bitmap .getWidth(), bitmap
.getHeight(),matrix,true);
};
如果需要将BitMap存储起来,代码如下
[java] view plaincopy
//创建并保存图片文件
File pictureFile = new File("/sdcard/", "camera.jpg");
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
} catch (Exception error) {
error.printStackTrace();
}
Copyright (c) 2006-2021 武汉宏鹏教育咨询有限公司 版权所有 All Rights Reserved.