学院动态


Android培训技术分享:camera 竖直拍照 获取竖直方向照片

发布 : 武汉北大青鸟      来源:武汉北大青鸟官方网站

发布日期 2013-10-01 10:53 点击量 71

武汉北大青鸟校区android培训课程技术专栏会为大家陆续奉上相关技术文章,下面是关于android camera 竖直拍照 获取竖直方向照片的相关技术内容,请欣赏。

根据需求,一般分为预览时竖直和拍照后得到竖直方向的照片

一、拍照时竖直预览:

实现原理①:设置拍照的Activity为横屏

实现①:在AndroidManifest.xml相应的activity添加一句android:screenOrientation="landscape"

缺点:Activity设置为横屏之后,上面的按钮等相应的也会旋转。

实现原理②:设置预览效果为竖直方向

实现②:在Camera对象初始化之后,设置Camera对象为竖直预览

代码:

[java] view plaincopy

  1. private void setDisplayOrientation(){  

  2.    int rotation = getWindowManager()  

  3.               .getDefaultDisplay().getRotation();  

  4.    int degree = 0;  

  5.    switch (rotation) {  

  6.    case Surface.ROTATION_0:    degree = 0break;  

  7.    case Surface.ROTATION_90:   degree = 90break;  

  8.    case Surface.ROTATION_180:  degree = 180break;  

  9.    case Surface.ROTATION_270:  degree = 270break;  

  10.    }  

  11.    int result;  

  12.    CameraInfo info = new CameraInfo();  

  13.    Camera.getCameraInfo(0, info);  

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

  15.        result = (info.orientation + degree) % 360;  

  16.        result = (360 - result) % 360;  

  17.    }else{  

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

  19.    }  

  20.    myCamera.setDisplayOrientation(result);  

  21.    //这里的myCamera就是已经初始化的Camera对象  

  22. }  

二、得到竖直方向的照片:

实现原理:将拍照回调函数得到的Byte[]数组转化为BitMap对象,再对BitMap对象进行旋转处理

实现:贴上源代码吧

[java] view plaincopy

  1. @Override  

  2. public void onPictureTaken(byte[] data, Camera camera) {  

  3.    //将得到的照片进行270°旋转,使其竖直  

  4.    Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);  

  5.    Matrix matrix = new Matrix();  

  6.    matrix.preRotate(270);  

  7.    bitmap = Bitmap.createBitmap(bitmap ,0,0, bitmap .getWidth(), bitmap

  8. .getHeight(),matrix,true);  

  9. };  

如果需要将BitMap存储起来,代码如下

[java] view plaincopy

  1. //创建并保存图片文件  

  2. File pictureFile = new File("/sdcard/""camera.jpg");  

  3. try {  

  4.    FileOutputStream fos = new FileOutputStream(pictureFile);  

  5.    bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);  

  6.    fos.close();  

  7. catch (Exception error) {  

  8.    error.printStackTrace();  

}  

  1. 武汉北大青鸟校区android培训课程学习咨询电话:17740513250

 相关推荐

预约免费试听课
请填写您的姓名
请填写您的手机号
返回顶部