public boolean onTouchEvent(MotionEvent event) {……}これは、画面に触れたときに発生するイベント処理用のメソッドです。ここに、画面をキャプチャーする処理を用意しておけばいいわけですね。[Camera].takePicture( 撮影時 , row生成時 , jpeg生成時 );引数は3つあり、撮影をした直後、撮影した画像をrowデータとして生成した時、JPEGデータとして生成したときにそれぞれ呼び出されるコールバックを設定します。このコールバックは、撮影時がCamera.ShutterCallback、他の2つがCamera.PictureCallbackのインスタンスとして用意されます。ここでは、JPEG生成時のコールバックを以下のように用意しています。
PictureCallback jpeg = new PictureCallback() {
@Override
public void onPictureTaken(byte[] bytes, Camera camera) {
……データの保存処理……
}
}このPictureCallbackインスタンスは、その中にonPictureTakenメソッドを持ちます。このメソッドに、実際にコールバックとして呼び出される処理を用意すればよい、というわけです。<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
※リストが表示されない場合
AddBlockなどの広告ブロックツールがONになっているとリストなどが表示されない場合があります。これらのツールをOFFにしてみてください。
※AndroidManifest.xmlの追加
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
※SampleApp.javaの修正
package jp.tuyano;
import java.io.*;
import android.app.*;
import android.content.Context;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.os.Bundle;
import android.util.Log;
import android.view.*;
import android.widget.Toast;
public class SampleApp extends Activity {
private Preview mPreview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
mPreview = new Preview(this);
setContentView(mPreview);
}
}
class Preview extends SurfaceView implements SurfaceHolder.Callback {
SurfaceHolder mHolder;
Camera mCamera;
Preview(Context context) {
super(context);
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException exception) {
mCamera.release();
mCamera = null;
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewSize(w, h);
mCamera.setParameters(parameters);
mCamera.startPreview();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
PictureCallback jpeg = new PictureCallback() {
@Override
public void onPictureTaken(byte[] bytes, Camera camera) {
FileOutputStream stream = null;
BufferedOutputStream buffer = null;
try {
stream = new FileOutputStream("/sdcard/capimg.jpg");
buffer = new BufferedOutputStream(stream);
buffer.write(bytes);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
buffer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
mCamera.takePicture(null,null,jpeg);
mCamera.startPreview();
}
return true;
}
}
| << 前へ | 次へ >> |