USBカメラを繋げて表示しているので、カメラを回転させたり、
カメラサイズを取得して、サーフェイスに設定したりしています。
package com.android_test;
import java.io.FileOutputStream;
import java.util.List;
import android.app.Activity;
import android.hardware.Camera;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
public class AndroidTestActivity extends Activity {
private String filePath;
private Camera camera;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SurfaceView mySurfaceView = (SurfaceView) findViewById(R.id.surfaceView1);
SurfaceHolder holder = mySurfaceView.getHolder();
holder.addCallback(mSurfaceListener);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
// カメラの総数
int numberOfCameras = Camera.getNumberOfCameras();
Log.d("個数", String.valueOf(numberOfCameras));
// 保存フォルダの取得
filePath = Environment.getExternalStorageDirectory().getPath();// /mnt/sdcard
Log.d("SDカードのパス", filePath);
}
private SurfaceHolder.Callback mSurfaceListener = new SurfaceHolder.Callback() {
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
camera = Camera.open(0);
try {
camera.setPreviewDisplay(holder);
} catch (Exception e) {
e.printStackTrace();
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
camera.release();
camera = null;
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
Log.d("サーフェイスサイズ", "w=" + String.valueOf(width) + "h=" + height);// 480x661
camera.setDisplayOrientation(90);// カメラを回転
Camera.Parameters parameters = camera.getParameters();
List<Camera.Size> size = parameters.getSupportedPreviewSizes();
Log.d("カメラのサイズ", "w=" + String.valueOf(size.get(0).width) + "h="
+ String.valueOf(size.get(0).height));// 480x640
parameters.setPreviewSize(size.get(0).width, size.get(0).height);
camera.setParameters(parameters);
camera.startPreview();
}
};
// ボタンが押された時の処理
public void SetButtonOnClick(View v) {
// camera = Camera.open(1);//カメラを開く
// カメラ画像を取得
camera.takePicture(null, null, mPictureListener);
}
// JPEGイメージ生成後に呼ばれるコールバック
private Camera.PictureCallback mPictureListener = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
// SDカードにJPEGデータを保存する
if (data != null) {
FileOutputStream myFOS = null;
try {
myFOS = new FileOutputStream(filePath
+ "/DCIM/Camera/camera_test.jpg");
myFOS.write(data);
myFOS.close();
} catch (Exception e) {
e.printStackTrace();
}
camera.release();
}
}
};
}
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <SurfaceView android:id="@+id/surfaceView1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1"/> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" android:onClick="SetButtonOnClick"/> </LinearLayout>
カメラサイズを取得して同じ値を設定している部分は、
意味のない処理をしているかもしれません。

0 件のコメント:
コメントを投稿