zoukankan      html  css  js  c++  java
  • 正确显示竖屏预览和拍照的照片

    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;
                }
  • 相关阅读:
    ylbtech-LanguageSamples-Indexers_2(索引器)
    ylbtech-LanguageSamples-Indexers(索引器)
    ylbtech-LanguageSamples-Hello World
    ylbtech-LanguageSamples-Generics(泛型)
    Tomcat
    Tomcat中部署WEB项目的四种方法
    解决fonts.gstatic.com无法访问
    关于android的屏幕保持常亮
    求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
    不用加减乘除实现加法
  • 原文地址:https://www.cnblogs.com/nafio/p/9137285.html
Copyright © 2011-2022 走看看