2012-04-10 15 views
2
public class PreviewDemo extends Activity { 
    private SurfaceView preview=null; 
    private SurfaceHolder previewHolder=null; 
    private Camera camera=null; 
    private boolean inPreview=false; 
    private boolean cameraConfigured=false; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 

     preview=(SurfaceView)findViewById(R.id.preview); 
     previewHolder=preview.getHolder(); 
     previewHolder.addCallback(surfaceCallback); 
     previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 

     camera=Camera.open(); 
     startPreview(); 
    } 

    @Override 
    public void onPause() { 
     if (inPreview) { 
      camera.stopPreview(); 
     } 

     camera.release(); 
     camera=null; 
     inPreview=false; 

     super.onPause(); 
    } 

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

    private void initPreview(int width, int height) { 
     if (camera!=null && previewHolder.getSurface()!=null) { 
      try { 
       camera.setPreviewDisplay(previewHolder); 
      } 
      catch (Throwable t) { 
       Log.e("PreviewDemo-surfaceCallback", 
        "Exception in setPreviewDisplay()", t); 
       Toast 
        .makeText(PreviewDemo.this, t.getMessage(), Toast.LENGTH_LONG) 
        .show(); 
      } 

      if (!cameraConfigured) { 
       Camera.Parameters parameters=camera.getParameters(); 
       Camera.Size size=getBestPreviewSize(width, height, 
        parameters); 

       if (size!=null) { 
        parameters.setPreviewSize(size.width, size.height); 
        camera.setParameters(parameters); 
        cameraConfigured=true; 
       } 
      } 
     } 
    } 

    private void startPreview() { 
     if (cameraConfigured && camera!=null) { 
      camera.startPreview(); 
      inPreview=true; 
     } 
    } 

    SurfaceHolder.Callback surfaceCallback=new SurfaceHolder.Callback() { 
     public void surfaceCreated(SurfaceHolder holder) { 
      // no-op -- wait until surfaceChanged() 
     } 

     public void surfaceChanged(SurfaceHolder holder, 
       int format, int width, 
       int height) { 
      initPreview(width, height); 
      startPreview(); 
     } 

     public void surfaceDestroyed(SurfaceHolder holder) { 
      // no-op 
     } 
    }; 
} 

上記のコードは、アプリケーションを起動すると、カメラのプレビューが表示され、アクションが実行されないため正常に動作しています。しかし、私はライブフィードカメラに画像のオーバーレイを取得したい。助けてください.....カメラプレビューでイメージオーバーレイを取得する方法

答えて

関連する問題