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度旋转。

  

源码下载

你可能感兴趣的:(android)