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); 这个方法并不能改变预览的角度,这个方法会改变保存后的视频文件播放时是否是横向。根据用户的习惯,最后也添加这个代码保证在播放视频是是横向的。

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. android PhoneGap 自定义插件 发现信息 转
  3. [Android]照相机范例代码
  4. Android(安卓)Style.xml的应用详解及代码实现
  5. Android之实现手势缩放的ImageView
  6. Android(安卓)button按钮点击过快造成多次事件
  7. 自定义Android的Spinner
  8. Android的提交数据到服务器
  9. Android(安卓)如何根据网络地址获取网络图片方法

随机推荐

  1. Android(安卓)Power Management 实现
  2. 改造 Android(安卓)官方架构组件 ViewMod
  3. android 中关于 activity 的一些理解
  4. Android应用程序与SurfaceFlinger服务的
  5. Android高手进阶教程(二)之----Android(
  6. 《安卓开发必知的50个技巧》读书笔记
  7. Android音频开发(3):如何播放一帧音频
  8. 安卓新手之路——关于layout一些属性的整
  9. 教你如何在 Android(安卓)使用多线程下载
  10. Android中的Apk的加固(加壳)原理解析和实