bigbang权志龙吸毒,妹妹恋人ova,3366植物大战僵尸
如题,相信很多开发者在调用系统照相机接收拍好的照片时,发现照片被无故旋转了90度。这一问题反映在大部分的三星手机上,当然其他的机器还没试完全,总之是有问题。
于是乎想到如下的解决办法:
前三种方法均不是理想的解决方案。
首先说1:这种类似于穷举的办法,总会有那些被遗忘的“角落”,维护这些机型会很繁琐;
然后说2:如果这样的话,如果刚好用户要横屏照照片,还是会发生旋转;
最后说3:这种方法岂是我等“懒”程序员所能做到的?(ps:其实是需求所限啦,自己写照相app,耗时+费精力+容易出bug。好处就在于用户会感觉自己始终处于同一app中,而不是发生了跳转。)
那么第四种方案是如何做到的呢?
首先通过分析,通常一张照片包含许多exif信息。这些信息包含了拍照的设备,曝光度,是否使用了闪光灯种种内容。这其中包括了角度,也就是旋转问题的症结所在。
手机自身的照片查看器(某些机型)在显示照片的时候,会分析这些信息,当分析的角度的信息时,会自动旋转照片到合适的角度。比较常见的角度是90、180、270。大部分的三星手机在竖屏拍照的时候会拍出角度为90度的照片,横屏为0度。因此,解决的思路就是按照exif中的角度信息进行旋转即可。主要用到安卓api中的matrix。关键代码可参考下面的代码片:
exifinterface exifinterface = new exifinterface(appcfg.image_file); int orientationdegree = exifinterface.getattributeint(exifinterface.tag_orientation, exifinterface.orientation_normal); matrix matrix = new matrix(); matrix.reset(); if (orientationdegree == exifinterface.orientation_rotate_90) { matrix.postrotate(90); } if (orientationdegree == exifinterface.orientation_rotate_180) { matrix.postrotate(180); } if (orientationdegree == exifinterface.orientation_rotate_270) { matrix.postrotate(270); } bitmap = bitmap.createbitmap(bitmap, 0, 0, bitmap.getwidth(),bitmap.getheight(), matrix, true);
上述代码中,bitmap是bitmap对象,我这里需要在后面显示,所以暂时没有recycle(),提醒大家一下,免得内存溢出。
到此,无论是三星还是什么机型,利用这种通用的方法,即可解决照片旋转的问题了。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android studio开发小型对话机器人app(实例代码)
Android通过Java sdk的方式接入OpenCv的方法
Android 通过cmake的方式接入opencv的方法步骤
Android Studio finish()方法的使用与解决app点击“返回”(直接退出)
Android 进度条 ProgressBar的实现代码(隐藏、出现、加载进度)
网友评论