2013-06-10 8 views
9

यह कैसे दिखता है: http://i41.tinypic.com/30278m1.pngफिक्स एंड्रॉयड कैमरा ऐप पहलू अनुपात और रोटेशन

यह तस्वीर में की तरह दिखता है, मैं इसे सही rotaion के साथ एक सही पहलू अनुपात

ले लो करने के लिए कृपया एक कोड देखो चाहते हैं , मेरे द्वारा यह कैसे किया जा सकता है ?

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

उत्तर

7

इस के साथ अपने surfaceChanged विधि बदलें:

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

मुझे आशा है कि मैं तुम्हें मदद की है

यह मेरा कोड है!

+0

isPreviewRunning और getContext त्रुटियों के रूप में चिह्नित हैं! isPreviewRunning को एक चर पर हल नहीं किया जा सकता है और विधि getContext() को अपरिभाषित –

+0

ठीक है, मैंने अभी अपना जवाब बदल दिया है। –

+1

उत्कृष्ट काम mikhael !! यह काम करता है, मैंने आपकी साइट पर एक नज़र डाली है कि आपने अच्छी परियोजनाएं की हैं –

संबंधित मुद्दे