Android中的相机方向问题
我正在构建一个使用相机拍照的应用程序。 这是我的源代码来做到这一点:
File file = new File(Environment.getExternalStorageDirectory(),
imageFileName);
imageFilePath = file.getPath();
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
//Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
startActivityForResult(intent, ACTIVITY_NATIVE_CAMERA_AQUIRE);
在onActivityResult()
方法上,我使用BitmapFactory.decodeStream()
来拾取图像。
当我在Nexus上运行我的应用程序时,它运行良好。 但是当我在三星Galaxy S或HTC Inspire 4G上运行时,图像的方向不正确。
拍摄后的图像预览--------- SD卡上的真实图像
拍摄后的图像预览--------- SD卡上的真实图像
这里有很多类似的话题和问题。 既然你没有写自己的相机,我认为它归结为:
有些设备会在保存图像之前旋转图像,而另一些设备只是在照片的exif数据中添加方向标签。
我建议检查照片的exif数据并特别寻找
ExifInterface exif = new ExifInterface(SourceFileName); //Since API Level 5
String exifOrientation = exif.getAttribute(ExifInterface.TAG_ORIENTATION);
由于该照片在您的应用中正确显示,因此我不确定问题出在哪里,但这绝对应该让您走上正确的道路!
我刚刚遇到同样的问题,并用它来纠正方向:
public void fixOrientation() {
if (mBitmap.getWidth() > mBitmap.getHeight()) {
Matrix matrix = new Matrix();
matrix.postRotate(90);
mBitmap = Bitmap.createBitmap(mBitmap , 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), matrix, true);
}
}
如果位图的宽度大于高度,则返回的图像处于横向,所以我将它旋转90度。
希望它能帮助其他任何人解决这个问题。
有两件事情需要:
相机预览需要与您的旋转相同。 通过camera.setDisplayOrientation(result);
设置它camera.setDisplayOrientation(result);
将拍摄的照片保存为相机预览。 通过Camera.Parameters
完成此Camera.Parameters
。
int mRotation = getCameraDisplayOrientation();
Camera.Parameters parameters = camera.getParameters();
parameters.setRotation(mRotation); //set rotation to save the picture
camera.setDisplayOrientation(result); //set the rotation for preview camera
camera.setParameters(parameters);
希望有所帮助。
链接地址: http://www.djcxy.com/p/41835.html