2

Android でライブ カメラ ビューを変更するにはどうすればよいですか?

私は検索していて、このアプリhttps://play.google.com/store/apps/details?id=com.fingersoft.cartooncameraを私がやりたいことの良い例として見つけました。カメラビューにも何らかの効果を適用したかったのです。エフェクトを追加したり、カメラ ビューに何かを描画したりする方法を見つける必要があります。

私が理解している限りでは、ビデオ ストリームを取得し、いくつかの変更を適用して、カメラ ビューに戻す必要があります。

何か案は?

どうもありがとう!

4

1 に答える 1

2

このトピックの詳細については、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にあります。

于 2013-06-11T05:26:45.383 に答える