2012-03-28 15 views
6

मेरे पास एक कैमरा पूर्वावलोकन क्लास (नीचे देखें) है जो पूर्णस्क्रीन और परिदृश्य लॉन्च कर रहा है ... लेकिन छवि को बढ़ाया जा रहा है और विकृत हो रहा है .. क्या यह पूर्वावलोकन पूर्णस्क्रीन बने रहने का एक तरीका है लेकिन विकृत नहीं?विरूपण/खींचने के बिना पूर्णस्क्रीन कैमरा पूर्वावलोकन

camLayer:

public class CamLayer extends SurfaceView implements SurfaceHolder.Callback { 
     Camera camera; 
     SurfaceHolder previewHolder; 
     String camID; 
     private static final String TAG = "Cam Preview"; 


     public CamLayer(Context context, String facing) 
     { 
       super(context); 
       camID = facing; 
       previewHolder = this.getHolder(); 
       previewHolder.addCallback(this); 
       previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 


     } 
     public void surfaceCreated(SurfaceHolder holder) { 
      startCamera(); 
     } 

     @Override 
     public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) 
     { 
       Parameters params = camera.getParameters(); 
        //params.setPreviewSize(width, height); 
        //params.setPictureFormat(PixelFormat.JPEG); 
        camera.setParameters(params); 
        camera.startPreview(); 


     } 

     public void surfaceDestroyed(SurfaceHolder arg0) 
     { 

      stopCamera(); 
     } 



     public void onResume() { 

      startCamera(); 

     } 

     public void onPause() { 

      stopCamera(); 
     } 


     public void stopCamera(){ 
      System.out.println("stopCamera method"); 
      if (camera != null){ 
       camera.stopPreview(); 
       camera.setPreviewCallback(null); 
       camera.release(); 
       camera = null; 
       previewHolder.removeCallback(this); 
       previewHolder = null; 
      } 
     } 

     private void startCamera(){ 
      if(camID.equals("front")){ 
       camera=Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT); 
      }else{ 
       camera=Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK); 
      } 
      try { 
        camera.setPreviewDisplay(previewHolder); 

       } 
        catch (Throwable e){ Log.w("TAG,", "failed create surface !?!?"); } 
     } 

     public void draw(Canvas canvas) { 
      super.draw(canvas); 
      Paint p = new Paint(Color.RED); 
      Log.d(TAG, "draw"); 
      canvas.drawText("PREVIEW", canvas.getWidth()/2, 
       canvas.getHeight()/2, p); 
     } 
} 
+0

क्या समस्या हल हो गई है? –

उत्तर

1

आप params.getSupportedPreviewSizes();

चलाने की आवश्यकता है और उस से अपने दृश्य के लिए सबसे अच्छा previewSize लगता है

इस परियोजना पर देखो: https://github.com/commonsguy/cw-advandroid/blob/master/Camera/Picture/src/com/commonsware/android/picture/PictureDemo.java

private Camera.Size getBestPreviewSize(int width, int height, 
             Camera.Parameters parameters) { 
    Camera.Size result=null; 

    for (Camera.Size size : parameters.getSupportedPreviewSizes()) { 
     if (size.width <= width && size.height <= height) { 
     if (result == null) { 
      result=size; 
     } 
     else { 
      int resultArea=result.width * result.height; 
      int newArea=size.width * size.height; 

      if (newArea > resultArea) { 
      result=size; 
      } 
     } 
     } 
    } 

    return(result); 
    } 
0

में लेना ब्रू के बारे में क्या कहना है इसके अलावा ओडी पूर्वावलोकन आकार, यदि सटीक आपके कैमलेयर आयामों और आपके द्वारा चुने गए कैमरे के पूर्वावलोकन आकार के बीच पहलू अनुपात मिलान नहीं है, तो विरूपण से बचने का एकमात्र विकल्प अपने कैमलेयर के लेआउट को समायोजित करना है।

कैमरे का पूर्वावलोकन बस पूरे दृश्य को कवर करने के लिए फैलाया जाता है, इससे कोई फर्क नहीं पड़ता कि पहलू अनुपात क्या हैं, इसलिए एक अवांछित दृश्य के लिए, आपको चयनित पूर्वावलोकन पहलू अनुपात से मेल खाने के लिए व्यू के लेआउट को कॉन्फ़िगर करना होगा। एंड्रॉइड डेवलपर साइट custom components documentation देखें; विशेष रूप से मापन के बारे में हिस्सा।

आप पूर्वावलोकन पहलू अनुपात के आधार पर एक चौड़ाई और ऊंचाई की रिपोर्ट करना चाहते हैं, और जब आप दृश्य आकार को अपडेट करने के लिए कैमरा पूर्वावलोकन आकार कॉन्फ़िगर करते हैं तो आपको अपने यूआई का रिलायआउट ट्रिगर करने की आवश्यकता हो सकती है।

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