このトピックの詳細については、Android - Camera Previewとこの投稿を参照してください。まったく別のアプローチは、OpenCVを使用することです。
画像を取得して画面上でプレビューするために考えられる最小のコードは次のようになります。
public class MainActivity extends Activity implements Callback {
Camera camera;
SurfaceView surfaceView;
SurfaceHolder holder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView = (SurfaceView) findViewById(R.id.surfaceView1);
}
@Override
protected void onResume() {
super.onResume();
camera = Camera.open();
Camera.Parameters parameters = camera.getParameters();
parameters.setPictureFormat(ImageFormat.JPEG);
camera.setParameters(parameters);
holder = surfaceView.getHolder();
holder.addCallback(this);
camera.setPreviewCallback(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
// You could apply some pixel operations directly here.
Log.d("Camera", "Camera image aquired");
}
});
}
@Override
protected void onPause() {
super.onPause();
camera.stopPreview();
camera.release();
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
camera.setPreviewDisplay(holder);
} catch (IOException e) {
e.printStackTrace();
}
camera.startPreview();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
}
これを行う完全な例は、GitHubにあります。