【问题标题】:Modify live camera view修改实时摄像机视图
【发布时间】:2012-12-12 18:46:18
【问题描述】:

如何在 Android 上修改实时摄像头视图?

我正在搜索并发现这个应用程序https://play.google.com/store/apps/details?id=com.fingersoft.cartooncamera 是我想做的一个很好的例子。我也想对我的相机视图应用一些效果。我需要找到一种方法来添加一些效果或在我的相机视图上绘制一些东西。

据我所知,我必须获取一些视频流,应用一些更改并在相机视图中显示。

有什么想法吗?

非常感谢!

【问题讨论】:

    标签: android android-camera


    【解决方案1】:

    您可以在Android - Camera Preview 和此post 中找到有关此主题的更多信息。 另一种方法是使用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找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多