修复Android摄像头应用程序的长宽比和旋转 [英] Fix Android Camera app aspect ratio and rotation
本文介绍了修复Android摄像头应用程序的长宽比和旋转的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
它的外观: http://i41.tinypic.com/30278m1.png
它看起来像在事先知情同意,我希望它有正确的rotaion一个正确的长宽比
我们来看一看code请,我该如何解决?
这是我的code:
公共类MainActivity扩展活动实现SurfaceHolder.Callback {
相机mCamera;
SurfaceView米preVIEW;
@覆盖
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main);
米preVIEW =(SurfaceView)findViewById(R.id. preVIEW);
:M preview.getHolder()的addCallback(本);
米preview.getHolder()的setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS)。
mCamera = Camera.open();
}
@覆盖
公共无效的onPause(){
super.onPause();
mCamera.stop preVIEW();
}
@覆盖
公共无效的onDestroy(){
super.onDestroy();
mCamera.release();
}
@覆盖
公共无效surfaceChanged(SurfaceHolder持有人,INT格式,诠释的宽度,高度INT){
Camera.Parameters PARAMS = mCamera.getParameters();
名单< Camera.Size>大小= params.getSupported previewSizes();
Camera.Size选定= sizes.get(0);
params.set previewSize(selected.width,selected.height);
mCamera.setParameters(PARAMS);
mCamera.start preVIEW();
}
@覆盖
公共无效surfaceCreated(SurfaceHolder持有者){
尝试 {
mCamera.set previewDisplay(M preview.getHolder());
}赶上(例外五){
e.printStackTrace();
}
}
@覆盖
公共无效surfaceDestroyed(SurfaceHolder持有者){
Log.i(preVIEW,surfaceDestroyed);
}
}
解决方案
此更改surfaceChanged方式:
@覆盖
公共无效surfaceChanged(SurfaceHolder持有人,INT格式,诠释的宽度,高度INT){
参数参数= mCamera.getParameters();
名单< Camera.Size> previewSizes = parameters.getSupported previewSizes();
Camera.Size previewSize = previewSizes.get(4); // 480H x720瓦特
parameters.set previewSize(previewSize.width,previewSize.height);
parameters.setFlashMode(Parameters.FLASH_MODE_AUTO);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
mCamera.setParameters(参数);
显示显示=((窗口管理器)getSystemService(Context.WINDOW_SERVICE))getDefaultDisplay()。
如果(display.getRotation()== Surface.ROTATION_0){
mCamera.setDisplayOrientation(90);
}否则,如果(display.getRotation()== Surface.ROTATION_270){
mCamera.setDisplayOrientation(180);
}
mCamera.start preVIEW();
}
我希望我已经帮你!
How it looks: http://i41.tinypic.com/30278m1.png
It looks like in the pic ,I want it to have a correct aspect ratio with correct rotaion
Take a look the code please , how can I fix it ?
This is my code:
public class MainActivity extends Activity implements SurfaceHolder.Callback {
Camera mCamera;
SurfaceView mPreview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPreview = (SurfaceView)findViewById(R.id.preview);
mPreview.getHolder().addCallback(this);
mPreview.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mCamera = Camera.open();
}
@Override
public void onPause() {
super.onPause();
mCamera.stopPreview();
}
@Override
public void onDestroy() {
super.onDestroy();
mCamera.release();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
Camera.Parameters params = mCamera.getParameters();
List<Camera.Size> sizes = params.getSupportedPreviewSizes();
Camera.Size selected = sizes.get(0);
params.setPreviewSize(selected.width,selected.height);
mCamera.setParameters(params);
mCamera.startPreview();
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
mCamera.setPreviewDisplay(mPreview.getHolder());
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
Log.i("PREVIEW","surfaceDestroyed");
}
}
解决方案
Change your surfaceChanged method with this :
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
Parameters parameters = mCamera.getParameters();
List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();
Camera.Size previewSize = previewSizes.get(4); //480h x 720w
parameters.setPreviewSize(previewSize.width, previewSize.height);
parameters.setFlashMode(Parameters.FLASH_MODE_AUTO);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
mCamera.setParameters(parameters);
Display display = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
if(display.getRotation() == Surface.ROTATION_0) {
mCamera.setDisplayOrientation(90);
} else if(display.getRotation() == Surface.ROTATION_270) {
mCamera.setDisplayOrientation(180);
}
mCamera.startPreview();
}
I hope I have helped you!
这篇关于修复Android摄像头应用程序的长宽比和旋转的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文