Android拍照、摄像方向旋转的问题 代码具体解释

近期做了个拍照、摄像的应用。遇到了拍照、摄像的图像相对于现实。翻转了90度。原因:相机这个硬件的角度是横屏的角度,所以会出现都是横屏的。

1.照相、摄影预览图像的正确角度显 示:

    public static void setCameraDisplayOrientation(Activity activity,
            int cameraId, android.hardware.Camera camera) {
        android.hardware.Camera.CameraInfo info =
                new android.hardware.Camera.CameraInfo();
        android.hardware.Camera.getCameraInfo(cameraId, info);
        int rotation = activity.getWindowManager().getDefaultDisplay()
                .getRotation();
        int degrees = 0;
        switch (rotation) {
            case Surface.ROTATION_0: degrees = 0; break;
            case Surface.ROTATION_90: degrees = 90; break;
            case Surface.ROTATION_180: degrees = 180; break;
            case Surface.ROTATION_270: degrees = 270; break;
        }

        int result;
        if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
            result = (info.orientation + degrees) % 360;
            result = (360 - result) % 360;  // compensate the mirror
        } else {  // back-facing
            result = (info.orientation - degrees + 360) % 360;
        }
        camera.setDisplayOrientation(result);
    }

改方法动态获取手机是Landscape(横屏)或Portrait(竖屏)来更改预览图。

(后屏的cameraId是0 )

2.图像保存的正确角度(当我们拍下照片,发现角度又不正确)

@Override

public void onPictureTaken(byte[] data, Camera camera) {

	        try {
	                  Bitmap realImage = BitmapFactory.decodeByteArray(data, 0, data.length);
	                  android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo();
	                  android.hardware.Camera.getCameraInfo(0, info);
	                  Bitmap bitmap = rotate(realImage, info.orientation);

	                  FileOutputStream fos = new FileOutputStream(pictureFile);
	                  bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
	                  fos.close();                

//	            FileOutputStream fos = new FileOutputStream(pictureFile);
//	            fos.write(data);
//	            fos.close();

	            DBRecordAdapter.getInstance().insertRecord(bean);
	        } catch (FileNotFoundException e) {
	            Log.d(TAG, "File not found: " + e.getMessage());
	        } catch (IOException e) {
	            Log.d(TAG, "Error accessing file: " + e.getMessage());
	        }

}

3.录像回放的正确的方向:

		mMediaRecorder.setOrientationHint(90);

该方法在prepare()之前调用。

时间: 2024-08-28 01:41:47

Android拍照、摄像方向旋转的问题 代码具体解释的相关文章

拍照、摄像方向旋转的问题 代码详解

最近做了个拍照.摄像的应用.遇到了拍照.摄像的图像相对于现实,翻转了90度.原因:相机这个硬件的角度是横屏的角度,所以会出现都是横屏的. 1.照相.摄影预览图像的正确角度显 示: public static void setCameraDisplayOrientation(Activity activity, int cameraId, android.hardware.Camera camera) { android.hardware.Camera.CameraInfo info = new

Android拍照+方形剪裁——附代码与效果图

本文链接    http://blog.csdn.net/xiaodongrush/article/details/29173567 参考链接    http://stackoverflow.com/questions/12758425/how-to-set-the-output-image-use-com-android-camera-action-crop 1. 缘起 要开发一个头像上传的模块,头像上传过程分两步.第一步,相机拍照或者从图库选取照片,产生一个照片,第二步,提供头像剪裁,一般是

[Android] 拍照、截图、保存并显示在ImageView控件中

最近在做Android的项目,其中部分涉及到图像处理的内容.这里先讲述如何调用Camera应用程序进行拍照,并截图和保存显示在ImageView控件中以及遇到的困难和解决方法. PS:作者购买了本<Android第一行代码 著:郭霖>,参照里面的内容完成(推荐该书,前面的布局及应用非常不错).网上这类资料非常多,作者仅仅分享给初学者同时在线记录些内容,希望对大家有所帮助. 首先,设置activity_main.xml为LinearLayout布局且 android:orientation=&q

Qt for Android 程序禁止屏幕旋转

有时候我们希望让一个程序的界面始终保持在一个方向,不随手机(平板)方向旋转而变化:在AndroidManifest.xml的每一个需要禁止转向的Activity配置中加入 android:screenOrientation=”landscape” 属性. landscape = 横向 portrait = 纵向 原创文章,转载请注明: 转载自 http://www.mr-wu.cn/ 吴川斌的博客 本文链接地址: Qt for Android 程序禁止屏幕旋转 http://www.mr-wu.

QtAndroid详解(3):startActivity实战Android拍照功能

在"QtAndroid详解(1):QAndroidJniObject"中,我们介绍了 QAndroidJniObject 这个 Qt JNI 的核心类,在""中我们介绍了 startActivity 以及与它配套的一些 Android 背景知识,这次我们来看一个实例,演示如何使用 startActivity 来调用 Android 系统功能,同时也演示 QAndroidJniObject 的常见用法. 实例介绍 先看下实例效果,然后再论. 我们只是演示 API 用法

获取Android设备的方向

带有g-sensor的Android设备上可通过API获取到设备的运动加速度,应用程序通过一些假设和运算,可以从加速度计算出设备的方向 获取设备运动加速度的基本代码是: SensorManager sm = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); sm.registerListener(new SensorEventListener() { public void onSensorChanged(Sens

android 拍照注意问题

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, reqCode);//reqCode是返回的code. 但是在有些手机会在protected void onActivityResult(int requestCode, int resultCode, Intent data)里返回的data为空,这时候我们就要想一些办法来解决了,这个是手机问题. 我们要设置系统

android——拍照,相册图片剪切其实就这么简单

接触android这么久了.还没有真正的浩浩看看android拍照,相册图片剪切到底是怎么回事,每次都是从别人的代码一扣,就过来了.其实,谷歌提供的API已经很强大.只需要用的好,就那么几句就可以搞定神秘的拍照和剪切图片.废话不多少,直接看源码 package com.example.testcamera; import java.io.FileNotFoundException; import android.app.Activity; import android.content.Inten

获取Android设备的方向,Sensor和SensorManager实现手机旋转角度

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1009/425.html 带有g-sensor的Android设备上可通过API获取到设备的运动加速度,应用程序通过一些假设和运算,可以从加速度计算出设备的方向 获取设备运动加速度的基本代码是: SensorManager sm = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); sm.regi