根据需求,一般分为预览时竖直和拍照后得到竖直方向的照片


情况一、拍照时竖直预览:

实现原理①:设置拍照的Activity为横屏

实现①:在AndroidManifest.xml相应的activity添加一句 android:screenOrientation="landscape"

缺点:Activity设置为横屏之后,上面的按钮等相应的也会旋转。

实现原理②:设置预览效果为竖直方向

实现②:在Camera对象初始化之后,设置Camera对象为竖直预览

代码:

private void setDisplayOrientation(){int rotation = getWindowManager().getDefaultDisplay().getRotation();int degree = 0;switch (rotation) {case Surface.ROTATION_0:    degree = 0; break;case Surface.ROTATION_90:    degree = 90; break;case Surface.ROTATION_180:  degree = 180; break;case Surface.ROTATION_270: degree = 270; break;}int result;CameraInfo info = new CameraInfo();Camera.getCameraInfo(0, info);if(info.facing == CameraInfo.CAMERA_FACING_FRONT){result = (info.orientation + degree) % 360;result = (360 - result) % 360;}else{result =(info.orientation - degree + 360 ) % 360;}myCamera.setDisplayOrientation(result);//这里的myCamera就是已经初始化的Camera对象
}

情况二、得到竖直方向的照片:

实现原理:将拍照回调函数得到的Byte[]数组转化为BitMap对象,再对BitMap对象进行旋转处理

实现:贴上源代码吧

@Override
public void onPictureTaken(byte[] data, Camera camera) {//将得到的照片进行270°旋转(旋转角度可以自己修改),使其竖直Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);Matrix matrix = new Matrix();matrix.preRotate(270);bitmap = Bitmap.createBitmap(bitmap ,0,0, bitmap .getWidth(), bitmap .getHeight(),matrix,true);
};

如果需要修改图片的宽高:

我们都知道手机拍下来的照片长和宽都有一个默认值(我的手机的是640 * 480),那么如果用户需要修改长宽比例,需要通过Matrix对象的postScale方法重新设置长宽比例。接着用这个Matrix对象重新创建Bitmap对象。

代码(在上一部分代码里添加一些内容就好):

@Override
public void onPictureTaken(byte[] data, Camera camera) {//完成拍照后关闭ActivityCameraActivity.this.finish();//将得到的照片进行缩放及旋转(旋转角度自己可以定),使其竖直Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);Matrix matrix = new Matrix();int width = bitmap.getWidth();int height = bitmap.getHeight();//定义新图片的宽和高(默认的好像是 640 * 480)int newWidth = 1080;int newheight = 1920;//得到缩放比例(float类型)float widthScale = (float) newWidth / width;float heightScale = (float) newheight / height;//设置缩放比例matrix.postScale(widthScale, heightScale);//设置旋转角度(如果只做缩放处理,旋转这一步可以不要)matrix.preRotate(270);bitmap = Bitmap.createBitmap(bitmap ,0,0, width, height,matrix,true);
}

如果需要将BitMap存储到本地SD卡

代码:

//创建并保存图片文件
File pictureFile = new File("/sdcard/", "camera.jpg");
try {FileOutputStream fos = new FileOutputStream(pictureFile);bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);fos.close();
} catch (Exception error) {error.printStackTrace();
}

android camera 竖直拍照 获取竖直方向照片 做缩放处理相关推荐

  1. android 调用系统相机拍照 获取原图

    博客源址:android 调用系统相机拍照 获取原图 博客时间:2013-04-23 11:08 好吧,为了这个问题又折腾了一整天.之前在网上找来的方法,如果在onActivityResult中直接用 ...

  2. android camera(6)---camera2 拍照流程

    android camera2 拍照流程 正文 camera2 API 的加入是从AndroidV5.0(21)开始的,因此我们使用Camera2应该是在Android 5.0(含5.0)之后.同时, ...

  3. Android camera相机开发拍照功能

    在Android 5.0(SDK 21)中,Google使用Camera2替代了Camera接口.Camera2在接口和架构上做了巨大的变动,但是基于众所周知的原因,我们还必须基于 Android 4 ...

  4. Android打开相册vs拍照获取图片的原理实现

    前言:这几天在做用户登陆注册的逻辑时,遇到了要修改用户的头像问题的解决.在此把实现的原理以及实现过程中遇到的问题分享个大家...留下些许脚印 在手机的app里我们常常可用看到在个人中心页面有修改头像的 ...

  5. Android手机拍照程序开发,android Camera开发-手机拍照流程

    android 拍照API流程 1. 在布局文件中添加一个 surfaceView (摄影平面) 2.根据 SurfaceView  获得 Holder (固定器) 3.给固定器设置 SurfaceH ...

  6. android camera噪点,拍照时总是有很多噪点怎么办?方法很简单但你还真不知道

    原标题:拍照时总是有很多噪点怎么办?方法很简单但你还真不知道 摄影时很多小伙伴对颗粒感格外偏爱,总觉得这种质感能让照片更耐看.可悲的是,有些人盲目沉迷这种效果,噪点让人像都成麻子脸了还洋洋自得. 颗粒 ...

  7. android从相册或拍照获取照片第三方开源库TakePhoto

    TakePhoto https://github.com/crazycodeboy/TakePhoto/blob/master/README.md

  8. 我心依旧之Android Camera模块FW/HAL3探学序

    前沿: 目前对于Android Camera软硬件技术发展的主流方向是高像素.高帧率.多摄像头.超强的ISP以及各种视频图形处理算法等等.当前主流的Android系统中较为常见的Camera模块还均是 ...

  9. android 竖屏拍照旋转90度,三星等机型上拍照后图片被旋转90度的解决方案

    考虑到Android7.0以后拍照修改了调用和返回方式,找到了一个看起来还不错的第三方库,实际可能并非如此. -TakePhoto 在三星Note3和S6上测试,发现竖屏拍照后返回的照片是横屏的,在其 ...

  10. Android Camera 预览、拍照、保存照片 实现

    和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一.Camera2架构概述 二.Camera2中比较重要的类及方法 三.具体实现步骤 四.初始化相关参数 ...

最新文章

  1. keras构建前馈神经网络(feedforward neural network)进行多分类模型训练学习
  2. 【转】分享:c#和javascript函数的相互调用(ObjectForScripting 的类必须对 COM 可见。请确认该对象是公共的,或考虑向您的类添加 ComVisible 属性。)...
  3. Win10 基于excel 文件的python下载脚本
  4. 基于FPGA的智能PID控制器的设计与实现
  5. m.2接口和nvme区别_M.2硬盘的分类和区别
  6. Android Studio 安装具体步骤(配图)
  7. 手把手教你用express搭建个人博客(二)
  8. 十大经典排序算法5(Python版本)
  9. 新练习作,实验室网站首页——未采用
  10. Unity文件操作路径
  11. 拓端tecdat|采用SPSS Modeler的Web复杂网络对所有腧穴进行关联规则分析
  12. Docker教程小白实操入门(10)--如何删除一个镜像
  13. 2014.01.25 JFinal 使用经验积累
  14. Bill Gates推荐,人工智能必读的三本书 -《终极算法》,《超级智能》和《终极发明》zz
  15. 腾讯会议PPT演讲者模式
  16. Python暑期实践7.27
  17. 蛋蛋弹车3-具有功能安全EPS系统设计(电机控制算法-PID)
  18. echarts的gallery无法访问
  19. maven私服、将项目发布到maven私服、从私服下载jar到本地仓库、将第三方jar安装到本地仓库和maven私服
  20. 十二星座日期、性格、特性查询表

热门文章

  1. Machine Learning Concepts
  2. linux整盘远程备份,linux实现自动远程备份(scp+ssh)
  3. HTML5 语义元素
  4. Linux nohup 关闭终端的时候,程序依然能在后台运行( linux重定向及nohup不输出的方法)...
  5. 面象对象与面象过程内存分区
  6. javascript 函数2——对象排序
  7. 存储过程系列三:根据表别名方式distinct去重插入
  8. 【feign源码】流程分析
  9. Windows 安装配置Java开发环境《jdk8》
  10. Zookeeper之事件监听机制