Android相机表面视图

前端之家收集整理的这篇文章主要介绍了Android相机表面视图前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试为相机创建一个表面视图,以便在相机视图中呈现在表面上.目前我可以看到我的相机视图是一个黑色的屏幕视图.我试图在谷歌和这里看,但到目前为止,我没有找到我正在寻找.任何人都可以向我推荐一些想法.

解决方法

我已经写了一个类可以帮助你.
public class Preview_can_work extends Activity {
        private SurfaceView surface_view;  
        private Camera mCamera;
        SurfaceHolder.Callback sh_ob = null;
        SurfaceHolder surface_holder        = null;
        SurfaceHolder.Callback sh_callback  = null;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            getWindow().setFormat(PixelFormat.TRANSLUCENT);

            surface_view = new SurfaceView(getApplicationContext());
            addContentView(surface_view,new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));

            if (surface_holder == null) {
                surface_holder = surface_view.getHolder();
            }

            sh_callback = my_callback();
            surface_holder.addCallback(sh_callback);
        }

            SurfaceHolder.Callback my_callback() {      
                SurfaceHolder.Callback ob1 = new SurfaceHolder.Callback() {

                    @Override
                    public void surfaceDestroyed(SurfaceHolder holder) {
                          mCamera.stopPreview();
                          mCamera.release();
                          mCamera = null;
                    }

                    @Override
                    public void surfaceCreated(SurfaceHolder holder) {
                        mCamera = Camera.open();

                          try {
                               mCamera.setPreviewDisplay(holder);  
                          } catch (IOException exception) {  
                                mCamera.release();  
                                mCamera = null;  
                          }
                    }

                    @Override
                    public void surfaceChanged(SurfaceHolder holder,int format,int width,int height) {
                        mCamera.startPreview();
                    }
                };
                return ob1;
        }
    }

在您的清单文件中复制此代码获取相机权限

<uses-permission android:name="android.permission.CAMERA"/>

说明:

SurfaceView是一种View,它包含一个SurfaceHolder. SurfaceHolder保持了我们可以在其上显示媒体的表面(通常是框架).

mCamera是一个Camera对象,它将包含相机实例.

当您想要保留默认的Camera实例时,您可以简单地调用Camera.open();

相机mCamera = Camera.open();

现在你有开放的相机,或者你有默认的相机实例.现在,您需要从相机拍摄帧并将其显示在表面上.但是你无法显示

表面.这里的surfaceView提供了surfaceHolder和surfaceHolder提供的表面来显示相机框架.现在,当创建表面时,将会有三个回调函数

调用.

1. public void surfaceCreated(SurfaceHolder holder)
2. public void surfaceChanged(SurfaceHolder holder,int height)
3. public void surfaceDestroyed(SurfaceHolder holder)

注意: – 当您的应用程序暂停时,Surface将被破坏.

surfaceCreated:
surfaceCreated是一个回调函数,当您创建表面时将被调用.在此,您可以打开相机并设置其他属性.

surfaceChanged:
这将被称为至少一次,当您的表面将被创建.之后,当您的表面将更改(在设备旋转中)时,它将被调用.你可以在这里

由于您的表面已经创建,请启动预览.

surfaceDestroyed:
每次当你的表面都会毁灭时,这将被称为.现在如果你没有表面,那么你可以在那里显示你的相机框架,所以我已经通过使用释放相机

mCamera.release().这是非常重要的,因为如果您的活动将暂停,任何其他活动尝试打开相机,那么它将无法打开它,因为您有

已经打开相机.相机是一个共享资源,所以一次只有一个应用程序可以使用它.所以记住一件事,只要你打开一个相机,然后总是释放它.

stopPreview:
当您开始预览时,您的相机将开始捕获您的帧并将其显示在表面上.现在如果你的表面被破坏,那么你需要停止捕获帧

从相机,所以你必须调用mCamera.stopPreview.

原文链接:https://www.f2er.com/android/312997.html

猜你在找的Android相关文章