androidでカメラを使ってみる。

前回作成したsurfaceviewを利用して、今度は画面にカメラの画像を表示したいと思います。

カメラを利用する為に、マニフェストを追加します。

<uses-permission android:name="android.permission.CAMERA" />

surfaceviewを継承したクラスを作成する。

package in.andante.camerapre;

import android.content.Context;
import android.hardware.Camera;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class CameraView extends SurfaceView implements SurfaceHolder.Callback{

 private Camera myCamera;

 public CameraView(Context context){
 super(context);
 getHolder().addCallback(this);
 getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
 }

 public void surfaceCreated(SurfaceHolder holder){
 myCamera = Camera.open();
 try {
 myCamera.setPreviewDisplay(holder);
 } catch (Exception e) {
 e.printStackTrace();
 }
 }

 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){
 Camera.Parameters parameters = myCamera.getParameters();
 parameters.setPreviewSize(width, height);
 myCamera.setParameters(parameters);
 myCamera.startPreview();
 }

 public void surfaceDestroyed(SurfaceHolder holder){
 myCamera.release();
 myCamera = null;
 }
}

上記でカメラを表示するViewを作成できました。

package in.andante.camerapre;

import android.app.Activity;
import android.os.Bundle;

public class CameraPre extends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 CameraView view = new CameraView(this);
 setContentView(view);
 //setContentView(R.layout.main);
 }

 protected void onResume(){
 super.onResume();
 }

 protected void onStop(){
 super.onStop();
 }

 public void onDestroy(){
 super.onDestroy();
 }
}

上記を実行すれば、画面にカメラのプレビューを表示したアプリができます。

 

ですが、なぜか撮影している画像が90度回転しています。

 

これは、アンドロイドのアプリのカメラが横画面を基準に作成がされているからです。

なので画面のモードを変更する為に、画面の向きを変更します。

お絵かきアプリtips

の記事で、触れていますが、画面の向きを変更する為には

android:screenOrientation="landscape"

を設定します。(manifestです)

マニフェストのxmlは下記のようになりました。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="in.andante.camerapre"
 android:versionCode="1"
 android:versionName="1.0">
 <uses-sdk android:minSdkVersion="7" />
 <uses-permission android:name="android.permission.CAMERA"></uses-permission>

 <application android:icon="@drawable/icon" android:label="@string/app_name">
 <activity android:name=".CameraPre"
 android:label="@string/app_name"
 android:screenOrientation="landscape">
 <intent-filter>
 <action android:name="android.intent.action.MAIN" />
 <category android:name="android.intent.category.LAUNCHER" />
 </intent-filter>
 </activity>

 </application>
</manifest>

以上です。

今回はpreviewの表示だったので、次は撮影をしてみたいと思います。

前後の記事

前の記事:

次の記事:

関連の記事

コメント

:D ひろみ

上記を実行したのですが、動きません。

:D ひろみ

動きました。ごめんなさい。

:D かい

上記を実行したのですが、問題が発生し終了してしまいます

コメントの投稿

  • サイト内検索

新作アプリの紹介

関連サイトの紹介

アンドロイドアプリ開発TIPS
きぐるみカメラ
ふらいぱん
アンドロイドのデザイン集
Page top↑