android 部分手机Camera 拍照 图片被旋转90度的解决方法

2024-06-12 16:32

本文主要是介绍android 部分手机Camera 拍照 图片被旋转90度的解决方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

部分手机拍照完后 图片旋转角度90度,目前解决方法普遍都是通过图片路径,获取图片信息判断角度,然后转换角度。如下:

/*** 读取图片属性:旋转的角度* @param path 图片绝对路径* @return degree旋转的角度*/public int readPictureDegree(String path) {int degree  = 0;try {ExifInterface exifInterface = new ExifInterface(path);int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);switch (orientation) {case ExifInterface.ORIENTATION_ROTATE_90:degree = 90;break;case ExifInterface.ORIENTATION_ROTATE_180:degree = 180;break;case ExifInterface.ORIENTATION_ROTATE_270:degree = 270;break;}} catch (IOException e) {e.printStackTrace();}return degree;}/** 旋转图片 * @param angle * @param bitmap * @return Bitmap */ public Bitmap rotaingImageView(int angle , Bitmap bitmap) {  //旋转图片 动作   Matrix matrix = new Matrix();matrix.postRotate(angle);// 创建新的图片   return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);  }

如果你的需求是拍完照展现出来,这里你会遇到图片拉长显示问题(这个就不说了)。目前不用系统拍照,用camera1 camera2的话要用上面的方法就得先获取到图片路径,然后自己存本地。

下面是camera1拍照成功获取图片的方法:

mCamera.takePicture(null, null, null, new Camera.PictureCallback() {@Overridepublic void onPictureTaken(byte[] data, Camera camera) {bitmap=BitmapFactory.decodeByteArray(data,0,data.size)//存本地}});

下面是camera2拍照成功获取图片的方法:

private final ImageReader.OnImageAvailableListener mOnImageAvailableListener= new ImageReader.OnImageAvailableListener() {@Overridepublic void onImageAvailable(ImageReader reader) {try (Image image = reader.acquireNextImage()) {Image.Plane[] planes = image.getPlanes();if (planes.length > 0) {ByteBuffer buffer = planes[0].getBuffer();byte[] data = new byte[buffer.remaining()];bitmap= BitmapFactory.decodeByteArray(data, 0, data.size)//存本地}}}};

然后存完本地,你需要刷新图库,然后再调用上面获取图片的角度的方法才能让图片旋转到正确的角度,然后旋转正确后,还要自己把图片拉长之类的问题处理好。

这过程中你会遇到 图片存完之后 去调用获取照片信息的方法 会没有效果,那是因为 在同一个线程里,图片库没刷新,你获取的照片信息的角度一直都是0

那么你要自己想办法去处理了。展示的时候  图片多少会有些长宽不一。

如果你的需求只是获取到存本地,而不展示的话,那可以不用看我下面的内容了。

如果需要展示,或者对展示的bitmap做处理可以用下面的方法

1.首先你得是TextureView 这个控件来做预览,目前来说,SurfaceView和TextureView 对比的话,当然是TextureView更好一些

2.

Bitmap  bitmap_get= mTextureView.getBitmap();

就这样用就行了,获取当前预览显示的Bitmap。

 

这篇关于android 部分手机Camera 拍照 图片被旋转90度的解决方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1054740

相关文章

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应