我到处寻找解决方案,但无法使用任何有用的东西。我正在使用SurfaceView和FrameLayout来定制应用内相机。我有一个调用“mCamera.takePicture()”函数的按钮。在回调中,我按原样保存图片;问题是图片被旋转和翻转,并以奇怪的比例缩放。
我知道它的发生主要是因为我将camera参数的setPreviewSize设置为最佳大小,并使用mCamera.setDisplayOrientation()旋转它。预览看起来很漂亮。但是当我拍照并保存时,那就是搞砸了。
Camera.Parameters cp = mCamera.getParameters();
Size theSize = getOptimalPreviewSize(opt, w, h);
cp.setPreviewSize(theSize.width, theSize.height);
mCamera.setDisplayOrientation(90);
mCamera.setParameters(cp);
上面的代码是用surfaceChanged函数编写的。
如何在预览中显示已保存的图片?
相机预览中显示的内容的屏幕截图。尺寸精细,旋转精细:
这是在拍完照片之后。查看显示器,CD和插头的集合。它被压扁了,显示器看起来像波浪:
答案 0 :(得分:1)
pictureTaken()中返回的图像不受Camera.setDisplayOrientation()的影响。它采用Jpeg压缩格式,因此您可以通过Exif标头设置JPEG旋转而无需解码。这是Camera.setRotation()
经常做的事情,但在某些设备上它实际上是在硬件中执行旋转。这是最有效的方法,但有些观看者可能仍会显示旋转的图像。
或者,您可以使用JPEG lossless rotation使用jpegtran。