Camera拍照:

今天做照相机程序,结果写好了发现出问题了,预览的图像差90度。相关源代码如下:

Camera.Parameters params = camera.getParameters();
       params.setPreviewSize(width, height);
       params.setPreviewFrameRate(4);
       params.setPictureFormat(PixelFormat.JPEG);
       params.set("jpeg-quality", 85);
       params.setPictureSize(width, height);
       camera.setParameters(params);
       camera.setPreviewDisplay(sHolder);
       camera.startPreview();
       camera.autoFocus(null);

于是在网上搜索,发现确实存在这样一个问题,网上的解决方法也各不一致。最后用setDisplayOrientation()方法解决了,修改后的代码如下:

Camera.Parameters params = camera.getParameters();
       params.setPreviewSize(height, width);                1
       params.setPreviewFrameRate(4);
       params.setPictureFormat(PixelFormat.JPEG);
       params.set("jpeg-quality", 85);
       params.setPictureSize(height, width);                2
       camera.setParameters(params);
       camera.setDisplayOrientation(90);                    3
       camera.setPreviewDisplay(sHolder);
       camera.startPreview();
       camera.autoFocus(null);

首先添加了代码3,让Camera旋转90度。测试时发现虽然图像转回正常,但是上下却拉长了。进过研究修改代码1,把长宽颠倒。再测试预览正常了,但是拍照的时候获取的图片却依然是拉长的,于是修改代码2。这回拍照正常,但是仍然存在一个问题,保存的图片是横着的。

看网上很多人都遇到了这个问题,好像与系统有关,既然没法在Camera这里搞定,那么就将获取的Bitmap进行旋转。程序里通过重写PictureCallback的onPictureTaken来获取图片,代码是

Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length);

在这里可以对bm进行旋转,代码如下:

Bitmap bm0 = BitmapFactory.decodeByteArray(data, 0, data.length);
      Matrix m = new Matrix();
      m.setRotate(90,(float) bm0.getWidth() / 2, (float) bm0.getHeight() / 2);
      final Bitmap bm = Bitmap.createBitmap(bm0, 0, 0, bm0.getWidth(), bm0.getHeight(), m, true);

这样保存的图片就正常了!

MediaRecorder录像:

同样的预览问题在录像中也出现了,但是由于是用MediaRecorder进行录像,没有Camera对象,一时比较无措。后来经过网友的提醒,想到了MediaRecorder有setCamera()的方法,于是添加如下代码:

Camera c = Camera.open();
            c.setDisplayOrientation(90);
            c.unlock();
            mRecorder.setCamera(c);

这样预览的问题就解决了!至于网上很多人说添加mRecorder.setOrientationHint(90); 这个方法并不能改变预览的角度,这个方法会改变保存后的视频文件播放时是否是横向。根据用户的习惯,最后也添加这个代码保证在播放视频是是横向的。

android Camera拍照 及 MediaRecorder录像 预览图像差90度的更多相关文章

  1. Android Camera API/Camera2 API 相机预览及滤镜、贴纸等处理

    Android Lollipop 添加了Camera2 API,并将原来的Camera API标记为废弃了.相对原来的Camera API来说.Camera2是又一次定义的相机 API,也重构了相机 ...

  2. Android Camera开发:给摄像头预览界面加个ZoomBar(附完整代码下载)

    源码:http://files.cnblogs.com/android100/StandardCamera2013-10-18.zip 废话不说了,就是加个seekbar,拖动的话能够调节焦距,让画面 ...

  3. Android摄像头:只拍摄SurfaceView预览界面特定区域内容(矩形框)---完整(原理:底层SurfaceView+上层绘制ImageView)

    Android摄像头:只拍摄SurfaceView预览界面特定区域内容(矩形框)---完整实现(原理:底层SurfaceView+上层绘制ImageView) 分类: Android开发 Androi ...

  4. 谷歌发布 Android 8.1 首个开发者预览版,优化内存效率

    今晨,谷歌推出了 Android 8.1 首个开发者预览版,此次升级涵盖了针对多个功能的提升优化,其中包含对 Android Go (设备运行内存小于等于 1 GB)和加速设备上对机器学习的全新神经网 ...

  5. Android开发 获取视频中的信息(例如预览图或视频时长) MediaMetadataRetriever媒体元数据检索器

    前言 在Android里获取视频的信息主要依靠MediaMetadataRetriever实现 获取最佳视频预览图 所谓的最佳就是MediaMetadataRetriever自己计算的 /** * 获 ...

  6. 18.libgdx制作预览图,背景移动循环,改变地图颜色

    经过构思,游戏将分为两部分, 1,预览图,只负责展示世界形势 2,根据预览图生成的战役项 现在要记录的是我制作预览图的部分 1.预览图只有实际地图的1/4,首先生成地图(建议不要缩放以前地图,由于误差 ...

  7. 为Unity的新版ugui的Prefab生成预览图

    using UnityEngine;using System.Collections;using UnityEditor;using System.IO; [CustomPreview(typeof( ...

  8. HTML5-video标签-实现点击预览图播放或暂停视频

    HTML5-video标签-实现点击预览图播放或暂停视频 刚刚参加工作,开始更多的接触到一些新的知识,促使我开始了解html5和css3的新特性.这时我才真的发现到html5和css3的强大. 之前关 ...

  9. 可拖拽和带预览图的jQuery文件上传插件ssi-uploader

    插件描述:ssi-uploader是一款带预览图并且可以拖拽文件的jQuery ajax文件上传插件.该文件上传插件支持AJAX,支持多文件上传,可控制上的文件格式和文件大小,提供各种回调函数,使用非 ...

随机推荐

  1. C#中的委托事件的分析

    推荐:http://www.cnblogs.com/SkySoot/archive/2012/04/05/2433639.html 委托和事件在 .NET Framework 中的应用非常广泛,然而, ...

  2. JNI/NDK开发指南(二)——JVM查找java native方法的规则

    通过第一篇文章,大家明白了调用native方法之前,首先要调用System.loadLibrary接口加载一个实现了native方法的动态库才能正常访问,否则就会抛出java.lang.Unsatis ...

  3. WordPress 使用 Pie-Register 添加前台注册、登录、找回密码和编辑个人资料功能

    转自:http://www.wpdaxue.com/front-end-publishing.html Pie-Register 是一个功能比较完善的 WordPress 才能,使用它可以很方便添加和 ...

  4. Table嵌套去掉子table的外边框

    Table表格去掉子表格的边框 1. 父表格 <table align="center" style="border:none;cell-padding:0; ce ...

  5. 盘点 PHP 和 ASP.NET 的10大对比!

    [编者按]本文主要针对开源 PHP 和非开源的 ASP.NET 在性能.成本.可扩展性,技术支持和复杂性等方面进行比较. 在网上论坛,总是有成百上千的文章和帖子在讨论 PHP 和 ASP.NET,究竟 ...

  6. struts2文件下载出现Can not find a java.io.InputStream with the name的错误

    今天在用struts2就行文件下载时出现如下错误: Servlet.service() for servlet default threw exception java.lang.IllegalArg ...

  7. ANDROID_MARS学习笔记_S04_003_用HttpClent发http请求

    一.代码 1.xml(1)activity_main.xml <TextView android:layout_width="wrap_content" android:la ...

  8. 【HDOJ】2612 Find a way

    BFS. #include <iostream> #include <cstdio> #include <cstring> #include <queue&g ...

  9. Properties vs. Attributes

    http://blogs.msdn.com/b/ericlippert/archive/2009/02/02/properties-vs-attributes.aspx Here is yet ano ...

  10. Eclipse中添加android sdk javadoc和source

    在 javadoc location path中添加file:/D:/Android_SDK/sdk/docs/reference/   在 source attachment中添加为 Externa ...