2013-06-10 22 views
9

Làm thế nào nó trông giống: http://i41.tinypic.com/30278m1.pngFix tỷ lệ máy ảnh Android ứng dụng khía cạnh và xoay

Dường như trong pic, tôi muốn nó có một tỉ lệ chính xác với rotaion đúng

Hãy xem mã xin vui lòng , Làm thế nào tôi có thể sửa chữa nó ?

Đây là mã của tôi:

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"); 
} 
} 

Trả lời

7

Thay đổi phương pháp surfaceChanged của bạn với điều này:

@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(); 
} 

Tôi hy vọng tôi đã giúp bạn!

+0

isPreviewRunning & getContext được đánh dấu là lỗi! isPreviewRunning không thể được giải quyết thành biến số & Phương thức getContext() là không xác định –

+0

Ok, tôi vừa thay đổi câu trả lời của mình. –

+1

công việc tuyệt vời mikhael !! nó đã làm việc, tôi đã nhìn vào trang web của bạn, bạn đã thực hiện các dự án tốt –

Các vấn đề liên quan