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 件のコメント:
コメントを投稿