android camera(2)
先说说我的测试机器:nexus s。以下的结果都是通过nexus s上测试通过。
还是先上代码:
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { camera.setDisplayOrientation(90);//将镜头旋转90度。 flag=true; Log.i("por","1");}if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { parameters.set("orientation", "landscape"); parameters.set("rotation", 0); flag=false; Log.i("orientation", "1");//由于镜头默认是横屏的,所以这里可以为空}为什么我不采取第一种方法呢?因为相机默认是翻转了90度,即是水平放置 等价于DefaultDisplayRotation的状态永远是1,即是ROTATION_90(加入这段 int rotation = TestCamera1Activity.this.getWindowManager().getDefaultDisplay().getRotation();可以看到 )。不管你手机怎么翻转,surfaceChanged只会响应一次,因为强制了横屏了,surfaceview当然不会改变了。因为被强制了横屏,觉得有点受限制不爽。所以选择第二种。其实我们只需要获得镜头的方向,然后旋转对应的角度,那么预览图就正常了。由google sdk上可以看到有这四种方向ORIENTATION_UNDEFINED ORIENTATION_LANDSCAPE, ORIENTATION_PORTRAIT , ORIENTATION_SQUARE。我这里只对两种方向进行判断。
2.预览图像被拉伸变形问题
是因为preview的size与surfaceview的size比例不一样,同时你还要注意自己手机支持的preview的大小,上一篇已经说了不是任意的size都接受的。网上有各种办法,但是不知道能不能用。我没有自己试验就不多说了,因为我的demo的surfaceview比较小,看不出拉伸的。我提出的解决方案是:根据你设定的preview修改surfaceview的大小。
3.照片旋转问题如果是竖屏找出来的照片,虽然预览是没有旋转,但是最后成像的时候还是会旋转的,其中原因网上有概述http://jefry.iteye.com/blog/1337492。那么我的解决方法是用Matrix类对照片进行旋转,重新生成新的一幅bitmap,这里就不给出代码,可以在网上搜“android 图片旋转”。我这里出了点小问题,就是OOM问题,在createBitmap的时候内存溢出了,我猜测是因为图片太大了。至于解决方案留给大家思考了
最后回应第一篇最后留下的猜想,那就是会导致图片的拉伸,我猜错了~
附上android camera(2)的demo http://download.csdn.net/detail/bin381/4442510下集预告:自动对焦