Android图像旋转和调整大小

时间:2014-02-09 17:22:08

标签: android mobile camera preview

我到处寻找解决方案,但无法使用任何有用的东西。我正在使用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函数编写的。

如何在预览中显示已保存的图片?

相机预览中显示的内容的屏幕截图。尺寸精细,旋转精细:

Screenshot of what is shown in the preview of the camera. Size fine, rotation fine.

这是在拍完照片之后。查看显示器,CD和插头的集合。它被压扁了,显示器看起来像波浪: This is after the picture has been taken. Look at the monitor, collection of CDs and the plug. It's squashed and the monitor looks like a wave.

1 个答案:

答案 0 :(得分:1)

pictureTaken()中返回的图像不受Camera.setDisplayOrientation()的影响。它采用Jpeg压缩格式,因此您可以通过Exif标头设置JPEG旋转而无需解码。这是Camera.setRotation()经常做的事情,但在某些设备上它实际上是在硬件中执行旋转。这是最有效的方法,但有些观看者可能仍会显示旋转的图像。

或者,您可以使用JPEG lossless rotation使用jpegtran

在SourceForge上,有一个Java开源类LLJTran。 Android端口为on GitHub