C/C++プログラマの管理者が, Androidプログラムにチャレンジ. AndroidプログラミングのTipsをメモっていく予定です.

カメラのズーム機能を使用するには, カメラパラメータ(Camera.Parameters)を使用する.

ズームの設定

プレビュー画像を表示する」を参照して, カメラでプレビュー画像を表示できるようにする.
  • src/MainActivity.java
    • ズームイン
      • Camera#getParametersメソッドで, Camera.Parametersのインスタンスを取得する.
      • Camera.Parameters#isZoomSupportedメソッドで, ズーム機能をサポートしているかチェックする.
      • Camera.Parameters#getZoomメソッドで, 現在のズーム値を取得する.
      • Camera.Parameters#getMaxZoomメソッドで, 設定可能なズーム値の最大値を取得し, さらにズーム可能かチェックする.
      • Camera.Parameters#setZoomメソッドで, ズーム値を現在の値+1に設定する.
      • Camera#setParametersメソッドで, Camera.Parametersを設定する.
    • ズームアウト
      • ズームイン処理とほぼ同じ.
package com.moonlight_aska.android.camera02;

import java.io.IOException;
import java.util.List;
import android.app.Activity;
import android.hardware.Camera;
import android.hardware.Camera.Size;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ZoomControls;

public class MainActivity extends Activity implements SurfaceHolder.Callback {
  private Camera mCamera = null;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    SurfaceView preview = (SurfaceView)findViewById(R.id.preview_id);
    SurfaceHolder holder = preview.getHolder();
    holder.addCallback(this);
  }

  @Override
  public void surfaceCreated(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    // カメラオープン
    mCamera = Camera.open();

    // ズームコントロール
    ZoomControls zoomCtrl = (ZoomControls)findViewById(R.id.zoom_id);
    // ズームイン
    zoomCtrl.setOnZoomInClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
        Log.v("CameraZoom", "ZoomIn");
        // パラメータ取得
        Camera.Parameters params = mCamera.getParameters();
        if (params.isZoomSupported()) {
          int currZoom = params.getZoom();
          if (currZoom < params.getMaxZoom()) {
            params.setZoom(currZoom + 1);
            Log.v("CameraZoom", "Zoom = " + (currZoom+1));
            // パラメータ設定
            mCamera.setParameters(params);
          }
        }
      }
    });
    // ズームアウト
    zoomCtrl.setOnZoomOutClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
        Log.v("CameraZoom", "ZoomOut");
        // パラメータ取得
        Camera.Parameters params = mCamera.getParameters();
        if (params.isZoomSupported()) {
          int currZoom = params.getZoom();
          if (currZoom > 0) {
            params.setZoom(currZoom - 1);
            Log.v("CameraZoom", "Zoom = " + (currZoom-1));
            // パラメータ設定
            mCamera.setParameters(params);
          }
        }
      }
    });

    try {
      mCamera.setPreviewDisplay(holder);
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

  @Override
  public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    // TODO Auto-generated method stub
    mCamera.stopPreview();
    // プレビュー画面のサイズ設定
    Camera.Parameters params = mCamera.getParameters();
    List<Size> previewSizes = params.getSupportedPreviewSizes();
    Size size = previewSizes.get(0);
    params.setPreviewSize(size.width, size.height);
    mCamera.setParameters(params);
    // プレビュー開始
    mCamera.startPreview();
  }

  @Override
  public void surfaceDestroyed(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    mCamera.stopPreview();
    mCamera.release();
    mCamera = null;
  }
}
  • 動作例
端末:Nexus7(2013) / Android 4.4.4


注) SHARP SHL-22では, Camera.Parameters#getXXXメソッドで設定値がうまくとれない場合があり, 正常に動作せず.



コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu


逆引き(基礎編)

画面表示/操作(49)

フラグメント(1)

逆引き(応用編)

Firebase(2)

AD



管理人/副管理人のみ編集できます