android 怎么从camera中获取流

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 怎么从camera中获取流相关的知识,希望对你有一定的参考价值。

参考技术A 打开相机,即实例化Camera对象,Camera camera = Camera.open();
设置Camera的相关参数,Camera.Parameters parameters = camera.getParameters();
打开预览,camera.setPreviewDisplay(surfaceholder); camera.startPreview();
获取图片,这里只是从预览中获取因此使用,camera.setPreviewCallback(new Camera.PreviewCallback()……..);
停止预览,释放相机,camera.stopPreview();camera.release();本回答被提问者采纳
参考技术B 手机自带的播放器即可

android Camera 如何 获取最佳合适的尺寸

Android Camera  有  Camera.Parameters 属性,那我们怎么才能找到一个 合适的尺寸 去预览才不会变形呢?

demo

1、首先我们要 通过api 去获取 当前相机 所支持的 预览 比例

Camera.Parameters parameters =camera.getParameters()
   //获取当前相机支持的 尺寸
  List<Camera.Size> vSizes = parameters.getSupportedPreviewSizes();
//获取和屏幕比列相近的 一个尺寸
 Camera.Size previewSize = getSuitableSize(vSizes);
//重新定义 宽和高 (宽始终小于高)
 int previewWidth = Math.min(previewSize.width, previewSize.height);
 int previewHeight = Math.max(previewSize.width, previewSize.height);
   //获取 最终 我们需要预览的大小比列
  mPreviewScale = previewWidth * 1f / previewHeight;
    //算出 最终 宽高
        if (mPreviewWidth > previewWidth) 
            mPreviewHeight = (int) (mPreviewWidth / mPreviewScale);
         else if (mPreviewWidth < previewWidth) 
            mPreviewHeight = (int) (mPreviewHeight * mPreviewScale);
        
      
        parameters.setPreviewSize(mPreviewWidth, mPreviewHeight); // 设置预览图像大小

2、 获取 最接近屏幕的比例 方法

 private Camera.Size getSuitableSize(List<Camera.Size> sizes) 
        int minDelta = Integer.MAX_VALUE; // 最小的差值,初始值应该设置大点保证之后的计算中会被重置
        int index = 0; // 最小的差值对应的索引坐标
        for (int i = 0; i < sizes.size(); i++) 
            Camera.Size previewSize = sizes.get(i);
            Log.v(TAG, "SupportedPreviewSize, width: " + previewSize.width + ", height: " + previewSize.height);
            // 找到一个与设置的分辨率差值最小的相机支持的分辨率大小
            if (previewSize.width * mPreviewScale == previewSize.height) 
                int delta = Math.abs(mPreviewWidth - previewSize.width);
                if (delta == 0) 
                    return previewSize;
                
                if (minDelta > delta) 
                    minDelta = delta;
                    index = i;
                
            
        
        return sizes.get(index); // 默认返回与设置的分辨率最接近的预览尺寸
    

3、最后 我们要 重新设置 SurfaceView 的宽高为  我们算出来的 mPreviewWidth 、mPreviewHeight 

  RelativeLayout.LayoutParams preViewLp = (RelativeLayout.LayoutParams) mSurfaceView.getLayoutParams();
        mPreviewPoint = new Point(mPreviewWidth , mPreviewHeight);
        preViewLp.width = mPreviewPoint.x;
        preViewLp.height = mPreviewPoint.y;
        mSurfaceView.setLayoutParams(preViewLp);

 

以上是关于android 怎么从camera中获取流的主要内容,如果未能解决你的问题,请参考以下文章

android camera 照相机/摄像机

android Camera 如何 获取最佳合适的尺寸

android Camera 如何 获取最佳合适的尺寸

React Native - 从 expo-camera 获取帧

Android获取Camera录制的视频的地理位置

Android将字节数组从Camera API转换为颜色Mat对象openCV