android解决坚屏拍照和保存图片旋转90度的问题,并兼容4.0

转自: http://www.cnblogs.com/andgoo/archive/2012/08/29/2661896.html


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

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

第二步,解决竖屏拍照后保存图片会旋转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度旋转。

你可能感兴趣的:(android技术)