[Android] カメラプレビューを表示してみる

今回は、カメラプレビューを表示するお試し実装をしてみました。


カメラ機能を使用するために、AndroidManifest にパーミッションを
記載します。

<!-- カメラ機能を利用する権限 -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- カメラ搭載デバイス限定 -->
<uses-feature android:name="android.hardware.camera" />


他にもカメラ関連だとオートフォーカスやフラッシュといった機能を使用するための
パーミッションもありますが、今回は使用しない機能なので使用しない。

<!-- オートフォーカス -->
<uses-feature android:name="android.hardware.camera.autofocus" />
<!-- フラッシュ -->
<uses-feature android:name="android.hardware.camera.flash" />



で、次にレイアウト。
カメラプレビューを表示するビューはというと、SurfaceView に表示ですな。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<SurfaceView
android:id="@+id/surfaceView1"
android:layout_width="match_parent"
android:layout_height="match_parent" />

</LinearLayout>



プログラムのほうは下記のようになります。
サーフェイスのコールバック処理(SurfaceHolder.Callback)に
カメラプレビューに関する処理を作成してサーフェイスホルダーに
addCallback() で追加してあげます。


package android.sample;

import java.io.IOException;

import android.app.Activity;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class SampleActivity007 extends Activity {

private SurfaceView mCameraView;
private SurfaceHolder mHolder;

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

mCameraView = (SurfaceView)findViewById(R.id.surfaceView1);
mHolder = mCameraView.getHolder();
mHolder.addCallback(new SurfaceHolderCbk());
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

public class SurfaceHolderCbk implements SurfaceHolder.Callback {
Camera camera;

/**
* サーフェイスが変更された時のコールバック。
*/
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// カメラプレビューを開始
camera.startPreview();
}

/**
* サーフェイスが生成された時のコールバック
*/
@Override
public void surfaceCreated(SurfaceHolder holder) {
// カメラオープン
camera = Camera.open();
try {
// プレビューを表示するサーフェイスホルダーを設定
camera.setPreviewDisplay(holder);
} catch (IOException e) {
e.printStackTrace();
}
}

/**
* サーフェイスが破棄された時のコールバック
*/
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// カメラプレビューを停止
camera.stopPreview();
camera.release();
camera = null;
}
}
}



こんな感じでカメラプレビューが表示されました。
android カメラプレビュー


コメントの投稿

非公開コメント

プレビュー画像の保存

プレビュー画面にButtonを表示して、そのボタンをTouchするとプレビュー画像がギャラリーに表示できるようなカメラアプリを作成したくてしたくて、奮闘中です^^。ボタンまでは表示できたんですが、それを押すと強制終了してしまって、画像保存までいきません。参考になるプログラムや、説明をぜひお願いします^^。”カメラプレビューを表示してみる”のブログとてもわかりやすかったです!ありがとうございます^^

コメントありがとうございます。

>サット さん

コメントありがとうございます。
イメージとあっているかどうかはわかりませんが、カメラプレビューを保存してギャラリーに表示する実装を試して以下の記事に紹介してみました。

http://memo755.blog.fc2.com/blog-entry-105.html
プロフィール

hiiro

Author:hiiro

最新記事
カテゴリ
月別アーカイブ
最新コメント
最新トラックバック
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
Counter