Android系统相机在使用前置摄像头拍照的时候,最终会将拍下的画面做镜像翻转,来达到真实的视角效果,但由于Android手机大多将前置摄像头摆在左右两边(iPhone在靠中间的位置,效果会好很多),导致翻转后与拍照预览的画面还是会有较大的差别,所以我们这里就再做一次镜像将图片翻转回去。

图片镜像

public Bitmap convertBmp(Bitmap bmp) {int w = bmp.getWidth();int h = bmp.getHeight();Matrix matrix = new Matrix();matrix.postScale(-1, 1); // 镜像水平翻转Bitmap convertBmp = Bitmap.createBitmap(bmp, 0, 0, w, h, matrix, true);return convertBmp;}

图片的翻转主要用到变换矩阵中的缩放操作,x轴都乘-1,y轴保持不变。

图片保存

 private void saveBitmap() {try {File outFile = new File(Utils.getRootPath(),System.currentTimeMillis() + ".jpg");outFile.createNewFile();FileOutputStream outStream = new FileOutputStream(outFile);mBitmap.compress(CompressFormat.JPEG, 100, outStream);outStream.close();} catch (IOException e) {}}

上面的方法会将一个bitmap保存为jpg的图片文件。

拍照或者从本地选取图片

这里我们直接使用Intent来调用相机应用拍照或者图片应用来选择图片,如下

private void dispatchTakePictureIntent(int actionCode) {Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);try {File picFile = new File(Utils.getCameraFilePath(), System.currentTimeMillis() + ".jpg");picFile.createNewFile();mPhotoPath = picFile.getPath();intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(picFile));} catch (IOException e) {e.printStackTrace();}startActivityForResult(intent, actionCode);}private void dispatchGetPictureIntent(int actionCode) {mPhotoPath = null;Intent intent = new Intent(Intent.ACTION_PICK, null);intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");startActivityForResult(intent, actionCode);}

在调用其它应用后我们需要得到操作的图片,所以使用startActivityForResult()方法,在onActivityResult()中得到图片路径,

 @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if (resultCode == RESULT_OK) {// mPhotopath为空是指从相册选择的图片if (mPhotoPath == null) {Uri photoUri = data.getData();ContentResolver cr = this.getContentResolver();Cursor cursor = cr.query(photoUri, null, null, null, null);// 根据Uri从数据库中找if (cursor.moveToFirst()) {// 获取图片路径mPhotoPath = cursor.getString(cursor.getColumnIndex("_data"));}cursor.close();}if (mBitmap != null) {mBitmap.recycle();mBitmap = null;}mBitmap = BitmapFactory.decodeFile(mPhotoPath);if (mBitmap != null) {Bitmap temp = convertBmp(mBitmap);if (temp != null) {mImageView.setImageBitmap(temp);mBitmap.recycle();mBitmap = temp;}}mImageView.setImageBitmap(mBitmap);}

因为从相册选取本地图片后intent中只会保留一个缩略图,因此我们需要去查询媒体库来得到图片的具体路径。

下面是实际的运行效果

Android自拍相机应用——图片的镜像翻转相关推荐

  1. html图片水平镜像翻转

    title: 图片水平镜像翻转 tags: html category: 前端开发 代码如下: <!DOCTYPE html> <html lang="en"&g ...

  2. flash图片如何镜像翻转_在canvas上实现元素图片镜像翻转动画效果的方法

    这篇文章主要介绍了在canvas上实现元素图片镜像翻转动画效果的方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧! 一.Canvas图片水平镜像翻转效果预览 ...

  3. android实现自定义相机以及图片的水印

    最近在做图片的水印功能,也就研究了一下android的相机.在android中有两种方式可以进行拍照,一种是调用系统的拍照功能调用方式比较简单而且不需要权限. 调用方式: //照相机中获取照片publ ...

  4. android调用系统相机返回图片模糊

    最近需要用到调用系统相机拍摄照片的功能,于是就直接调用系统的相机进行拍照,发现返回的bitmap存储之后都是非常模糊的 调用系统相机拍摄照片,由于StartActivityForResult过时,改用 ...

  5. Python-opencv 实现图片的镜像翻转

    mport cv2 import numpy as npimg = cv2.imread('Test.jpg',1) imgInformation = img.shape #提取图片的信息 heigh ...

  6. flash图片如何镜像翻转_FLASH特效与实例-立体层旋转效果.

    这是一个来自 Flashzone 的例子,幸运鸟只作了简单的加工.在这个示例中,同样用到了一些非常简单的 Actions ,而效果却很不错,所以通过它来进一步认 识 Actions 的用法是再好不过了 ...

  7. flash图片如何镜像翻转_flash中怎么制作镜像跳动文字效果 值得收藏

    一般在动画片的开始或者影视等的片头这种效果比较常见,不难但是有点繁琐,所以大家在做的时候需要耐心点,熟练了之后就不觉得了 工具/材料 flash 操作方法 01 首先我们还是分析一下制作的关键点,这次 ...

  8. opencv-python图片的镜像

    实现步骤 1.创建一个足够大的空白面板(也就是足够大的矩阵) 2.将原图片进行镜像翻转处理 3.将原图片和镜像图片放入空白面板中 4.在源图像和镜像图像之间画分割线 注意:本人为了能完整显示图片,将源 ...

  9. 前端实现图片快速反转替换_在canvas上实现元素图片镜像翻转动画效果的方法

    一.Canvas图片水平镜像翻转效果预览 demo页面中点击图片动画效果可见. 二.Canvas上实现图片镜像翻转的实现 CSS中要想实现元素的翻转效果,比较简单,例如我们希望某一张图片水平镜像翻转, ...

最新文章

  1. 江苏开放大学计算机应用基础第四次作业,江苏开放大学-计算机应用基础第四次.doc...
  2. 水晶报表左侧树不显示属性设置
  3. leetcode-79-单词搜索(用dfs解决)
  4. XamarinAndroid组件教程设置动画的设置插值器
  5. codeblocks全屏模式怎么退出_IntelliJ IDEA 2020.1 EAP2 发布:新增禅模式和 LightEdit 模式...
  6. 三种代理服务器以及反向代理详解
  7. 《设计的品格 探索×呈现×进化的InDesign美学》—第1课1.3节文字游戏
  8. C#中Delegate和Event以及它们的区别
  9. windows2003 64位+iis6 php环境搭建
  10. 水利系统防雷,如何做好洪水预报警报系统的雷电防护
  11. java 如何查看文件编码_java判断文件编码 终于弄懂了编码是怎么回事
  12. 鸿蒙系统屏幕解锁问题,鸿蒙系统解锁卡退黑屏
  13. PC网站实现微信扫码登录功能(一)
  14. ubuntuv20启动界面美化_玩转Reno4手机,ColorOS 7.2界面清爽更贴心_手机通讯
  15. jsp+ssm计算机毕业设计演唱会售票系统【附源码】
  16. 并发知识体系大全:饿了么4面(Java岗)面经分享,干货满满
  17. 【AWS云从业者基础知识笔记】——模块1:AWS服务简介
  18. MySQL的隐式类型转换
  19. 由《编程之美》想到的
  20. 针对局域网IM飞秋(feiq)的开发总结

热门文章

  1. c语言高级编程培训,C语言高级编程
  2. java数组初始化0_Java自学-数组 初始化数组
  3. progress中的数据库访问
  4. 1Mb等于多少kb? KB MB GB TB 存储单位详解
  5. 网站SEO从入门到精通
  6. 8051单片机Proteus仿真与开发实例-光敏电阻+ADC0804仿真
  7. HTML5游戏开发高级教程 | Lynda教程 中文字幕
  8. 【推荐系统】协同过滤
  9. 为什么重写Equals方法要重写HashCode方法
  10. 3D目标检测之数据集