簡體   English   中英

Android Camera預覽反向風景配置

[英]Android Camera preview reverse landscape Config

我想將相機預覽設置為反向風景模式,當我通過清單方向嘗試進行預覽時,將預覽顯示設置為鏡像視圖。我在相機預覽上有一個疊加層,這就是為什么我想要反向風景模式的原因,我使用的是Android 4.0。

   class Preview extends SurfaceView implements SurfaceHolder.Callback { // <1>
   SurfaceHolder mHolder;  // <2>
   public Camera camera; // <3>

     Preview(Context context) {
super(context);

// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
mHolder = getHolder();  // <4>
mHolder.addCallback(this);  // <5>
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); // <6>
  }


  @Override
  public void surfaceCreated(SurfaceHolder holder)
  {
      try {
            if (camera != null) {
                camera.setPreviewDisplay(holder);
            }
        } catch (IOException exception) {
            Log.e("fd", "IOException caused by setPreviewDisplay()", exception);
        }


       }  // Called when the holder is destroyed

     @Override
   public void surfaceDestroyed(SurfaceHolder holder) {  // <14>
   //camera.setParameters(Camera.Parameters.FLASH_MODE_OFF);
  Parameters params = camera.getParameters();
  params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
  camera.setParameters(params);
  camera.stopPreview();
  camera.release();
   //camera = null;
    }

 // Called when holder has changed

     @Override
   public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { // <15>
  camera = Camera.open();
  Parameters params = camera.getParameters();
  List<Size> sizes = params.getSupportedPictureSizes();
  Camera.Size size = sizes.get(0);
  params.setFocusMode(Camera.Parameters.FOCUS_MODE_MACRO);
  params.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_AUTO);
  params.setSceneMode(Camera.Parameters.SCENE_MODE_LANDSCAPE);
  params.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
  params.setJpegThumbnailQuality(100);
  params.setExposureCompensation(0);
  params.setJpegQuality(100);

  // params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
  /*
   * 
   *  Camera.Parameters parameters = camera.getParameters();
List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();

// You need to choose the most appropriate previewSize for your app
Camera.Size previewSize = // .... select one of previewSizes here

parameters.setPreviewSize(previewSize.width, previewSize.height);
camera.setParameters(parameters);
camera.startPreview();
   */

   //int w=0,h=0;
   for(int i=0;i<sizes.size();i++)
   {
       if(sizes.get(i).width > size.width)
           size = sizes.get(i);
   }
   params.setPictureSize(size.width, size.height);
   //Toast.makeText(getContext(),                 size.width+"and"+size.height,Toast.LENGTH_SHORT).show();

  camera.setParameters(params);

 /* if (this.getResources().getConfiguration().orientation !=        Configuration.ORIENTATION_LANDSCAPE)
  {
  params.set("orientation", "portrait");
  camera.setDisplayOrientation(90);
  }*/
  camera.startPreview();
  try
  {
  camera.setPreviewDisplay(holder);
  }
  catch (IOException exception)
  {
  camera.release();
  camera = null;
  }

  }

}

此答案的所有功勞歸Jason Robinson所有

除了使用setCameraDisplayOrientation()之外 ,您還可以簡單地調用camera.setDisplayOrientation(270);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM