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 One上运行我的应用程序时,它运行良好。但是,当我在Samsung Galaxy S或HTC Inspire 4G上运行时,图像的方向不正确。


使用人像模式拍摄时,真实图像(保存在SD卡上)始终旋转90度。

拍摄后的图像预览 SD卡上的真实图像


拍摄后的图像预览--------- SD卡上的真实图像


使用风景模式拍摄时,一切都很好。

拍摄后的图像预览 SD卡上的真实图像


拍摄后的图像预览--------- SD卡上的真实图像


吃鸡游戏
浏览 465回答 3
3回答

千万里不及你

这里有很多类似的主题和问题。由于您不是在编写自己的相机,因此我认为可以归结为:一些设备在保存图像之前先旋转图像,而其他设备只是在照片的exif数据中添加方向标签。我建议检查照片的exif数据,并特别寻找ExifInterface exif = new ExifInterface(SourceFileName);     //Since API Level 5String exifOrientation = exif.getAttribute(ExifInterface.TAG_ORIENTATION);由于照片在您的应用程序中正确显示,因此我不确定问题出在哪里,但这绝对可以使您走上正确的道路!

宝慕林4294392

我刚刚遇到了相同的问题,并使用它来纠正方向: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度。希望它对这个问题有帮助。

ITMISS

需要两件事:相机预览需要与旋转相同。设置这个camera.setDisplayOrientation(result);将捕获的图片保存为相机预览。通过执行此操作Camera.Parameters。int mRotation = getCameraDisplayOrientation();Camera.Parameters parameters = camera.getParameters();parameters.setRotation(mRotation); //set rotation to save the picturecamera.setDisplayOrientation(result); //set the rotation for preview cameracamera.setParameters(parameters);希望能有所帮助。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android