android 豎屏拍照旋轉90度
阿新 • • 發佈:2019-01-28
第一步: 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度旋轉。