1. 程式人生 > >android 豎屏拍照旋轉90度

android 豎屏拍照旋轉90度

 第一步: AndroidManifest.xml 在Activity新增以下一個屬性

?
<span>android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="sensor",為的是能夠橫豎屏切換不用再次呼叫onCreate方法,直接呼叫onConfigurationChanged方法。screenSize是相容4.0系統的才可以生效,否則方法沒效。</span>
?
<application android:label=
"@string/app_name" android:icon="@drawable/ic_launcher"> <activity android:name=".MainActivity"  android:label="@string/app_name" <span style="color: #ff0000;">android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="sensor"</span>>  <intent-filter> 
<action android:name="android.intent.action.MAIN" />  <category android:name="android.intent.category.LAUNCHER" />  </intent-filter>  </activity> </application>

第二步,解決豎屏拍照後儲存圖片會旋轉90度的問題。這裡只能夠採取曲線救國了,就是把已經拍好的圖片用程式碼旋轉90度。

首先判斷當前是橫拍還是豎拍,然後在呼叫相機拍照後,在儲存圖片的方法裡,進行豎拍的照片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;  Configuration config = getResources().getConfiguration();
if (config.orientation==1)
{ // 堅拍
Matrix matrix = new Matrix();
matrix.reset();
matrix.postRotate(270);
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度旋轉。