您的位置:首页 > 移动开发 > Android开发

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

2012-08-29 13:01 561 查看
第一步: 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度旋转。

源码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: