首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

图像位图从摄像头/图库加载时发生旋转[Android 9]

在Android 9及更高版本中,图像位图从摄像头或图库加载时可能会出现旋转的情况。这是因为Android设备的摄像头和图库应用会根据设备的方向信息对图像进行旋转,以确保图像的方向正确显示。

为了正确处理图像的旋转问题,我们可以使用ExifInterface类来读取图像的Exif信息,并根据该信息来旋转图像。Exif信息是存储在图像文件中的元数据,其中包含了拍摄设备的方向信息。

以下是解决图像位图旋转问题的步骤:

  1. 首先,从摄像头或图库加载图像位图。
  2. 通过ExifInterface类读取图像的Exif信息。
  3. 从Exif信息中获取图像的方向信息。
  4. 根据方向信息来旋转图像位图。

下面是一段示例代码,展示了如何处理图像位图旋转问题:

代码语言:txt
复制
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.ExifInterface;

// 从摄像头/图库加载图像位图
Bitmap bitmap = BitmapFactory.decodeFile(filePath);

try {
    // 读取图像的Exif信息
    ExifInterface exif = new ExifInterface(filePath);
    int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);

    // 根据方向信息旋转图像位图
    Bitmap rotatedBitmap = null;
    switch (orientation) {
        case ExifInterface.ORIENTATION_ROTATE_90:
            rotatedBitmap = rotateBitmap(bitmap, 90);
            break;
        case ExifInterface.ORIENTATION_ROTATE_180:
            rotatedBitmap = rotateBitmap(bitmap, 180);
            break;
        case ExifInterface.ORIENTATION_ROTATE_270:
            rotatedBitmap = rotateBitmap(bitmap, 270);
            break;
        case ExifInterface.ORIENTATION_NORMAL:
        default:
            rotatedBitmap = bitmap;
            break;
    }

    // 使用旋转后的图像位图进行后续操作
    // ...

} catch (Exception e) {
    e.printStackTrace();
}

// 旋转图像位图的方法
private Bitmap rotateBitmap(Bitmap source, float angle) {
    Matrix matrix = new Matrix();
    matrix.postRotate(angle);
    return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true);
}

通过以上代码,我们可以根据图像的Exif信息对图像位图进行旋转操作,从而解决图像位图从摄像头或图库加载时可能发生的旋转问题。

腾讯云相关产品推荐:在处理图像位图旋转问题的过程中,可以使用腾讯云的图像处理服务(Image Processing)来实现图像的旋转、缩放、裁剪等操作。该服务提供了多种图像处理功能,可以满足各种图像处理需求。

腾讯云产品介绍链接:腾讯云图像处理

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android相机开发那些坑

),Android系统底层根据当前手机屏幕的方向对图像传感器采集到的数据进行了旋转处理,然后才送给显示系统,因此可以保证预览画面始终“正确”。...前置摄像头的镜像效果 Android相机硬件有个特殊设定,就是对于前置摄像头,在展示预览视图采用类似镜面的效果,显示的是摄像头成像的镜像。而拍摄出的照片则仍采用摄像头成像。...看到这里,大家可能会有些怀疑,不妨现在就试试自己Android手机上的前置摄像头,对比下预览图像和拍摄出照片的区别。...这个变化对之前竖屏预览的方向也会造成影响,本来对于后置摄像头旋转90度即可使预览视图正确,而对前置摄像头,如果也旋转90度的话,看到的预览图像则是上下颠倒的(因为x方向翻转了180度),因此必须再旋转180...为了解决这个问题,可以对前置摄像头拍摄的图像在生成位图文件增加一个水平翻转矩阵变换。 5.

29.5K50

Android中的人脸检测的示例代码(静态和动态)

Google 于2006年8月收购Neven Vision 公司 (该公司拥有10多项应用于移动设备领域的图像识别的专利),以此获得了图像识别的技术,并加入到android中。...mSpecPreviewTime = mScanEndTime - mScanBeginTime; //onPreviewFrame获取摄像头数据的时间 Log.i(TAG, "onPreviewFrame...YUV,再按图像尺寸压缩成JPEG,输出流中转成数组 byte[] arrayOfByte = localByteArrayOutputStream.toByteArray(); CameraRelease...mScanBeginTime = System.currentTimeMillis();// 记录下系统开始扫描的时间 } B,设置预览方向的函数说明,该函数比较重要,因为方向直接影响bitmap构造的矩阵旋转角度...; case Surface.ROTATION_270: degrees = 270; break; } orientionOfCamera = info.orientation; //获得摄像头的安装旋转角度

1.1K20
  • Android 9.0 强势来袭,带来了哪些新特性?

    多相机支持 在Android 9的设备上,用户可以同时两个或多个物理摄像头访问数据流。在具有双前置或双后置摄像头的设备上,可实现使用单个摄像头无法实现的创新功能,例如无缝变焦,散景和立体视觉。...我们还添加了基于显示的闪存支持 和访问OIS时间戳的 API,以 实现应用级图像稳定和特效。 在Android 9中,多摄像头API 支持具有FULL或 LIMITED功能的设备的单色摄像头 。...要在缩放图像范围内裁剪图像,请调用 setCrop()。 要创建可变位图,请true进入 setMutableRequired()。...借助Android 9设备上的平台支持,您可以轻松地后端服务器发送和使用HEIF图像。确保您的应用与此数据格式兼容以进行共享和显示后,请在应用中尝试将HEIF作为图像存储格式。...旋转 为了消除无意的旋转,我们添加了一种模式,即使设备位置发生变化也会固定当前方向。用户可以在需要通过按下系统栏中的按钮手动触发旋转。 在大多数情况下,对应用程序的兼容性影响很小。

    3.4K20

    Android训练课程(Android Training) - 高效的显示图片

    Android应用的UI 需要即时地加载多个位图。像ListView,GridView 和 ViewPager 组件 通常包含多个位图在屏幕上,更多可能性在关闭屏幕,使用手指拨动,立即准备去显示。...Android 2.3(API 级别 9)开始,垃圾回收器更激进的回收 软引用/弱引用,使得相当于无效。...你可以注意到,在图像填充到activity上几乎没有滞后,在你获得缓存是即刻内存中的。一些图像没有内存中被找到,也是有希望在磁盘缓存中找到,如果没有找到,就会像平常那样处理。...在运行在Android 3.0或者更高版本上的一个应用中,一个图片被 LruCache中移除,再在一个HashSet 中放置一个位图的软引用,使用inBitmap标记它以尽可能被重用。...如果后台线程要很多次直接磁盘中加载图像,那么添加一个内存或者磁盘缓存是很有益的,像课程 缓存位图 中描述的那样。

    2.9K00

    图片加载利器——Picasso

    ").into(imageView); Picasso不仅实现了图片异步加载的功能,还解决了android加载图片时需要解决的一些常见问题: 1.在adapter中需要取消已经不在视野范围的ImageView...Place holders-空白或者错误占位图片:picasso提供了两种占位图片,未加载完成或者加载发生错误的需要一张图片作为提示。...placeholder(R.drawable.user_placeholder) .error(R.drawable.user_placeholder_error) .into(imageView); 如果加载发生错误会重复三次请求...placeholder图片未完成加载的时候显示图片 fit调整大小以达到精确的大小 resize(int targetWidth, int targetHeight) 将图像大小调整为像素的大小...resizeDimen(int targetWidthResId, int targetHeightResId) 将图像大小调整到指定大小 rotate(float degrees) 按指定度旋转图像

    60930

    Android 开发 - 网络图片加载库 Fresco 的使用。

    它负责网络,本地文件系统,本地资源加载图片。为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级文件)。...Fresco的对 布局宽高的要求 你必须声明 android:layout_width 和 android:layout_height。 如果没有在XML中声明这两个属性,将无法正确加载图像。...这么做是有理由的: 所下载的图像可能和占位图尺寸不一致,如果设置出错图或者重试图的话,这些图的尺寸也可能和所下载的图尺寸不一致。...指定 加载显示的图片 使用 failureImage 指定 加载失败的显示的图片 使用 placeholderImage 指定占位图 <com.facebook.drawee.view.SimpleDraweeView...在开始加载之后,图会模糊到清晰渐渐呈现。 你可以设置一个清晰度标准,在未达到这个清晰度之前,会一直显示占位图

    1.9K00

    详解android 人脸检测你一定会遇到的坑

    笔者今年做了一个和人脸有关的android产品,主要是获取摄像头返回的预览数据流,判断该数据流是否包含了人脸,有人脸显示摄像头预览框,无人脸摄像头预览框隐藏,看上去这个功能并不复杂,其实在开发过程中...一:概述 Android SDK 中支持人脸检测,它提供了一个直接在位图上进行人脸检测的方法,这个 API 是android.media.FaceDetector,源文件路径是: frameworks...来检测人脸位置信息,我们需要在activity中实现Carema.PreviewCallBack接口,该接口有一个onPreviewFrame方法,这个方法返回摄像头实时图像的数据流,由于这个方法返回的数据流...2.1 无法识别人脸 1):相机角度问题 由于我在测试的时候,摄像头图像是垂直的,没有任何问题,但正式使用时,摄像头来自不同商家,导致摄像头图像是水平的了,如下图: ? ?...图像角度都不对了,当然无法识别人脸了,此时我们需要得到摄像头的默认旋转的角度,再作处理,特别声明:setDisplayOrientation() 这个方法是逆时针旋转,代码如下: public void

    1.8K20

    Android P 开发者预览版首发!

    摄像头的其他改进还包括:利用新的会话参数来有效减少初始捕捉的延迟,表面共享技术让摄像头客户端无须重启视频流便可处理各种使用情况。...用于位图和 drawable 的 ImageDecoder Android P 引入了一种更简单的方法来将图像解码为位图或 drawable,即用 ImageDecoder 替代了 BitmapFactory...ImageDecoder 允许您字节缓冲区、文件或 URI 创建位图或 drawable。...您亦可使用新支持库 alpha 版本中的 HeifWriter,字 YUV 节缓冲区、表面以及位图中写入 HEIF 静态图像。...例如,当网络拥塞,JobScheduler 可能推迟大型网络请求。而在网络可以不计量使用时,则可以运行多种预加载作业 (例如,预读标题) 来改进用户体验。

    1.3K20

    机器学习为核心,DeepMind助力谷歌开发的安卓 9「Pie」今日上线

    相机、音频、图像方面的新体验 多摄像头 API 和其它拍照更新 使用 Android 9,你现在可以在支持多摄像头 API 的设备上同时打开来自两个或更多物理摄像头的流。...借助 Android 9 设备上的平台支持,后端服务器发送和利用 HEIF 图像变得很容易。一旦确定你的应用程序与共享和显示的数据格式兼容,你可以尝试在应用程序中使用 HEIF 作为图像的存储格式。...字节缓冲区、表面或位图写入 HEIF 静止图像。...位图和绘图的图像解码器 图像解码器(ImageDecoder)API 为你提供了一种将图像解码为位图或绘图的更简便方法。你字节缓冲区、文件或 URI 中创建位图或绘图。...这能确保你在使用 Android 9 API 和目标来增强 app ,获得 Android 9 的良好用户体验, 用 Android 9 的功能和 API 来增强你的 app 当你准备好,就安装 Android

    2K10

    android 优化之Bitmap优化

    Android应用里,最耗费内存的就是图片资源。 在Android系统中,读取位图Bitmap,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常。...下面对初始化Bitmap对象过程中可能发生的OutOfMemory异常进行了捕获。 如果发生了异常,应用不会崩溃,而是得到了一个默认的图片。...以Gallery获取一个图片为例讲解缩放: public class MainActivity extends Activity { private ImageView iv;...R.layout.activity_main); wm = getWindowManager(); iv = (ImageView) findViewById(R.id.iv); } // 系统的图库里面...BitmapFactory.Options opts = new Options(); // 设置 不去真正的解析位图 不把他加载到内存 只是获取这个图片的宽高信息

    1.4K70

    到底有多强?苹果的增强现实框架:ARKit

    ARKit最佳实践 模型与骨骼动画 如果是使用.dae 转 .scn 文件,资源中包含骨骼动画加载.scn文件到 scene 中会丢失动画,需要在加载手动恢复一下(方法)。...最好不要将太远的光照加载模型文件中,这样会导致加载文件到SCNNdoe,你的 node 真实尺寸特别大,而你期望的尺寸可能只是模型对象的大小。...(这个我一般是用OpenGL的shader去做,我想苹果工程师是说将图像用Metal转成位图后,根据坐标去获取RGB值。但特征点不多的话,直接在CPU中利用公式计算一下不就行了吗?...(我自己试了一下,切换确实有轻微的卡顿,切换后ARSession就停止摄像头采集了,但3D渲染会继续,只是丧失了空间定位与检测识别的能力。) 5 . ARKit是否支持前置摄像头? 答:不支持。...[1504061940187_8772_1504061940277.jpg] 当pitch为90°,pitch与yew的旋转轴重合了,这时飞机丧失了一个旋转的维度。

    3.3K00

    10款实用Android UI 开发框架

    Android Universal Image Loader Android-Universal-Image-Loader是一款为Android打造的开源UI组件,旨在为开发者者提供一个异步加载图像功能...Android-Universal-Image-Loader能为开发者提供多线程图片加载,灵活更改ImageLoader的基本配置(最大线程数、缓存方式、图片显示等);图片异步加载缓(内存缓存及本地缓存...)存机制;对加载过程实现监听和事件处理;配置加载图片的显示选项,包括图片圆角处理和加载完成显示动画等功能。...ColorPicker ColorPicker是Android平台的颜色拾取器, 可以通过手机摄像头获取图像,或本地图库中获取图像,然后点击所感兴趣的颜色,就可以知道所选颜色的RGB、HEX、HSV值...Segmented Radio Button Segmented Radio Button可以在Android设备上实现iOS设备上分段控制效果的UI工具。 ? 9.

    3K70

    Android 9 Pie 现已面向全球正式发布!

    了解全部隐私变更 感官新体验: 摄像和影音的全面升级 多摄像头 API 以及其它改进 Android 9 开始,您可以在支持多摄像头 API 的设备上通过两个或更多实体摄像头同时访问视频流;在配有双前置或双后置摄像头的设备上...您亦可使用 AndroidX 库中的 HeifWriter YUV 字节缓冲区、Surface以及位图中写入 HEIF 静态图像。...用于位图和 drawable 的 ImageDecoder ImageDecoder API 让开发者可以通过一种更为简单的方式将图像解码为位图或 drawable。...ImageDecoder 允许您字节缓冲区、文件或 URI 创建位图或 drawable。...例如,当网络拥塞,JobScheduler 可能推迟大型网络请求;而在网络可以不计量使用时,则可以运行多种预加载作业 (例如,预读标题) 来改进用户体验。

    9.1K10

    高性能图片优化方案

    例如,一个手机拍摄的 2700 1900 像素的照片,需要 5.1M 的存储空间,但是在图像解码配置 ARGB_8888 ,它加载到内存需要 19.6M 内存空间(2592 1936 * 4 bytes...加载图片显示到手机通过代码,将这张图片加载进内存,会先解析(也就是解码操作)图片文件本身的数据格式,然后还原为位图,也就是 Bitmap 对象。...HARDWARE:特殊配置,当位图仅存储在图形内存中。 此配置中的位图始终是不可变的。...解决这个问题很自然想到的两步走,首先是要自动识别图像方向,计算旋转角度,然后对图像进行旋转并显示。...这些Metadata信息总的来说大致分为三类:日期时间、空间信息(经纬度、高度)、Camera信息(孔径、焦距、旋转角、曝光量等等)。关于图像旋转获取了图片的旋转方向后,然后再设置图像旋转

    84230

    Android流媒体开发之路一:Camera2采集摄像头原始数据并手动预览

    Android Camera2采集摄像头原始数据并手动预览 最近研究了一下android摄像头开发相关的技术,也看了Google提供的Camera2Basic调用示例,以及网上一部分代码,但都是在TextureView...于是实现一下几个功能: 获取摄像头数据,并手动绘制图像 随时开启/关闭预览 随时保存当前摄像头图像,即使在关闭预览情况下 Android Camera2接口   查阅了一些资料,Android Java...层由于API21开始,已经废弃原Camera接口,所以这里采用Camera2接口。...绘制图像 在绘制图像的时候,有个坑,那就是图像旋转,这个是由于手机上的摄像头传感器的视野坐标,一般都是旋转了90度或270度的,所以,需要把摄像头采集到的画面,进行旋转,才能还原出正确的视野画面。...与上面代码中类似,通过TextureView.lockCanvas(),获取到Canvas,调用drawBitmap()将图像写入,即可完成绘制。 运行截图 开启预览的4:3画面和16:9画面 ?

    3.1K50

    Android实现双目测距

    用户在点击之后会获取到图像中的坐标,然后使用这个坐标xyz中获取拍摄物体的实际三维坐标。...上面的是实现读取两张计算物体距离,并没有使用摄像头拍摄,那么接下来我们就通过使用Android设备接的双目摄像头,实时拍摄图像计算物体距离。...创建一个新的Activity,命名为CameraActivity,按照通常的调用摄像头的方式,这样获取到的图像是左右目摄像头拍摄的图片拼接在一起的并且旋转的,我们需要的是把他们旋转回来并把他们裁剪分割,...这样就可以获取到了两种分别是左右目摄像头拍摄的图像。...用户在点击之后会获取到图像中的坐标,然后使用这个坐标xyz中获取拍摄物体的实际三维坐标。

    2.5K10

    Android实现双目测距

    用户在点击之后会获取到图像中的坐标,然后使用这个坐标xyz中获取拍摄物体的实际三维坐标。...上面的是实现读取两张计算物体距离,并没有使用摄像头拍摄,那么接下来我们就通过使用Android设备接的双目摄像头,实时拍摄图像计算物体距离。...创建一个新的Activity,命名为CameraActivity,按照通常的调用摄像头的方式,这样获取到的图像是左右目摄像头拍摄的图片拼接在一起的并且旋转的,我们需要的是把他们旋转回来并把他们裁剪分割,...这样就可以获取到了两种分别是左右目摄像头拍摄的图像。...用户在点击之后会获取到图像中的坐标,然后使用这个坐标xyz中获取拍摄物体的实际三维坐标。

    1.1K20

    Android开发笔记(七十七)图片缓存算法

    内存缓存的数据结构可使用映射表HashMap,通过唯一的uri来定位图像的Bitmap对象;排队算法一般采用先进先出FIFO策略,考虑到FIFO需要对队列两端做操作,队列顶端移除溢出的图像,把新增的图像加到队列末端...这里注意,如果内存中已经存在该图像,则无需淡入淡出动画;只有网络上获取图片,这种需要用户等待的情况,才需要淡入淡出效果。...另外,为提高用户体验,经常在图片加载之前,就在原图位置先放一张占位图片;如果图片加载失败,也在原图位置提示错误图片或者默认图片;这些占位图片和错误图片可在配置缓存信息进行设置。...error : 指定图片加载失败的占位图片。 resize : 指定图片缩放的尺寸。 centerCrop : 指定图片居中裁剪。 centerInside : 指定图片在内部居中。...上线需要去掉该方法 .build(); //开始构建配置 DisplayImageOptions 显示信息主要指定显示模式与占位图片,可用于ImageLoader的displayImage

    1.1K70
    领券