这是在surfaceView中拍摄照片的mt代码:
@Override
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();
try {
mCamera.setPreviewDisplay(holder);
mCamera.setDisplayOrientation(90);
} catch (IOException exception) {
mCamera.release();
mCamera = null;
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
Camera.Parameters params = mCamera.getParameters();
Camera.Size result = getBestPreviewSize(params, width, height);
params.setPreviewSize(result.width, result.height);
params.setPictureFormat(ImageFormat.JPEG);
params.setJpegQuality(100);
mCamera.setParameters(params);
mCamera.startPreview();
}
图片预览处于纵向模式,但图片保存在我的存储空间中。如何以相同的预览方向保存图片?
答案 0 :(得分:1)
我遇到了同样的问题,但是我在解决它时只需要一行代码 surfaceChanged方法。
<强> params.setRotation(90); 强>
将您的代码更改为:
public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {
Camera.Parameters params = mCamera.getParameters();
Camera.Size result = getBestPreviewSize(params, width, height);
params.setPreviewSize(result.width, result.height);
params.setRotation(90) ***//Just add this single line of code***
params.setPictureFormat(ImageFormat.JPEG);
params.setJpegQuality(100);
mCamera.setParameters(params);
mCamera.startPreview();
}
答案 1 :(得分:0)
在您的Activity中将旋转声明为静态int变量
rotation = getWindowManager()。getDefaultDisplay()。getRotation();
然后在相机预览类
中添加此行 if(YourActivityname.rotation == 0 || YourActivityname.rotation == 180)
this.mCamera.setDisplayOrientation(90);
else
this.mCamera.setDisplayOrientation(0);
参考这个 http://developer.android.com/reference/android/hardware/Camera.Parameters.html#setRotation%28int%29
public void setRotation(int rotation)
答案 2 :(得分:0)
在setRotation()的文档中明确写出系统可能选择仅设置图像旋转的EXIF标志。实际上,在许多设备上,e.g. Samsung这正是发生的事情。
您可以使用Android port的Java open source library,它为无损Jpeg旋转提供了一个类。