最通俗的安卓OpenGL教学10——Camera1/2预览+VBO+FBO+矩阵变换+水印

本文详细介绍了如何使用OpenGL渲染Camera的预览数据,包括Camera1和Camera2 API的使用方法,OpenGL纹理绑定过程,以及如何在OpenGL环境中显示Camera画面。

OpenGL 在相机中的使用也是非常广泛的,可以通过OpenGL给相机的预览数据做滤镜、美颜、水印、结合多纹理的渲染,可以实现很多的拍摄特效。所以,接下来会把之前的openGL基础知识都串联起来,做出一个OpenGL在Camera中的应用示例。

OpenGL预览摄像头数据的原理是利用OpenGL生成纹理并绑定到SurfaceTexture,然后把Camera的预览数据设置显示到SurfaceTexture中,这样就可以在OpenGL中拿到摄像头数据并显示了。

先看效果:

在这里插入图片描述

其实这里就是对Camera知识的扩展了,不过我们只是把Camera当作是OpenGL的一种应用场景,OpenGL的应用场景有很多。现在要灵活的配合Camera应用OpenGL,还需要对一些安卓Camera的知识有所了解。所以,我先概括一下Camera的基础知识及要点,后面如果还有时间,我再出一个安卓Camera系列的总结,看能不能也做成一个通俗易懂的教程。

1.安卓Camera基本知识及概念

一般,如果只是想简单的实现拍照和拍视频功能,可以利用Intent打开系统提供的功能。

拍摄照片:MediaStore.ACTION_IMAGE_CAPTURE ;
拍摄视频:MediaStore.ACTION_VIDEO_CAPTURE ;

但是如果要定制相机功能,那就会用到安卓Camera相关的api了

安卓有2套Camera API,其兼容性如下:

API 21以下:android.hardware.Camera(已过时)

API 21以上:android.hardware.Camera2

安卓Camera可以利用设备的相机来预览画面,拍照和录制视频,如果需要自动对焦功能,就要加入相应的权限。

 <uses-permission android:name="android.permission.CAMERA" />
 <uses-feature android:name="android.hardware.camera" />
 <uses-feature android:name="android.hardware.camera.autofocus" />
 <uses-permission android:name="android.permission.WEITE_EXTERNAL_STORAGE" />

2.Camera1相关知识

2.1 使用步骤

Camera1的使用步骤一般为以下几步:

  • 利用open(int cameraID)获取Camera实例
  • 利用getParameters()获取默认设置
  • 利用setParameters(Camera.Parameters)进行参数设置
  • 利用setDisplayOrientation(int)函数设置正确的预览方向
  • 预览图像,可以配合SurfaceView,利用setPreviewDisplay(SurfaceHolder)设置SurfaceView的SurfaceHolder用于预览;也可以加入openGL进行图像渲染。
  • 调用startPreview()开始预览
  • takePicture 拍摄照片
  • 调用takePickture后预览会停止,想要继续预览就再调用- - startPreview()函数
  • 调用stopPreview()停止预览
  • 调用release()释放资源,可在onPause调用停止预览,在onResume开始预览。

3.Camera2 相关知识点

3.1重要的类

  • CamaraManager
  • CameraDevice
  • CameraCuptureSession
  • CameraCharacteristics
  • CuptureRequest
  • ImageRender
  • Listsurfaces

3.2使用步骤

①TextrueView.setSurfaceTextureListner()
onSurfaceTextureAvailable(SurfaceTexture surface,w,h);
②获取CameraDevice对象
CameraManager.openCamera("0",new CameraStateCallback)
onOpened(CameraDevice cameraDevice);
③获取CameraCaptureSsion对象
cameraDevice.createCapatureSsion(surfaces,CameraCaptureSession.StateCallback)
onConfigured( CameraCaptureSession session);
④创建会话
val captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)
val surface = Surface(mTextureView.surfaceTexture)
captureRequestBuilder.addTarget(surface)  // 将CaptureRequest的构建器与Surface对象绑定在一起
captureRequestBui
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值