zoukankan      html  css  js  c++  java
  • android解决坚屏拍照和保存图片旋转90度的问题,并兼容4.0

     第一步: AndroidManifest.xml 在Activity添加以下一个属性

    android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="sensor",为的是能够横竖屏切换不用再次调用onCreate方法,直接调用onConfigurationChanged方法。screenSize是兼容4.0系统的才可以生效,否则方法没效。
    <application android:label="@string/app_name"
            android:icon="@drawable/ic_launcher">
           <activity android:name=".MainActivity"  
                      android:label="@string/app_name"
                      android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="sensor">  
                <intent-filter>  
                    <action android:name="android.intent.action.MAIN" />  
                    <category android:name="android.intent.category.LAUNCHER" />  
                </intent-filter>  
            </activity> 
        </application>
    

    第二步,解决竖屏拍照后保存图片会旋转90度的问题。这里我会在onConfigurationChanged方法进行判断当前是横拍还是竖拍,然后在调用相机拍照后,在保存图片的方法里,进行竖拍的照片90度旋转。

         

    PictureCallback jpeg = new PictureCallback() {  
              
            @Override  
            public void onPictureTaken(byte[] data, Camera camera) {  
                // TODO Auto-generated method stub  
            	 Bitmap bMap; 
                try  
                {// 获得图片  
                	 
        	        
        	        bMap = BitmapFactory.decodeByteArray(data, 0, data.length);  
        	         
        	        Bitmap bMapRotate;  
        	        if (takeType != 0) {  //坚拍
        	            Matrix matrix = new Matrix();  
        	            matrix.reset();  
        	            matrix.postRotate(90);  
        	            bMapRotate = Bitmap.createBitmap(bMap, 0, 0, bMap.getWidth(),  
        	                    bMap.getHeight(), matrix, true); 
        	            bMap = bMapRotate;
        	        }
              
               // Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length);  
                File file = new File(filePath);  
                BufferedOutputStream bos =  
                    new BufferedOutputStream(new FileOutputStream(file));  
                bMap.compress(Bitmap.CompressFormat.JPEG, 100, bos);//将图片压缩到流中  
                bos.flush();//输出  
                bos.close();//关闭  
                }catch(Exception e)  
                {  
                    e.printStackTrace();  
                }  
                  
            }  
        };  
    

      关键代码是以上。

     

     当用竖拍转横拍,还是横拍转竖拍,都要先在surfaceChanged方法,停止预览相机,重新设置下摄像头就不会再出现90度旋转。

      

    源码下载

  • 相关阅读:
    11
    关于一些问题的解决办法[记录]TF400017
    jdbc一次性采集mysql和oracle的海量数据,5000W+为例
    java 读取配置文件类
    Apache Thrift
    Runtime.getRuntime().exec 类 防止阻塞
    angularjs select
    angularjs
    简单的搭mysql开发环境
    运用java反射
  • 原文地址:https://www.cnblogs.com/andgoo/p/2661896.html
Copyright © 2011-2022 走看看