倾斜相机预览的 SurfaceView
Skewing the SurfaceView of the Camera Preview
这里有一些背景信息可以帮助解释这种情况。我的任务是构建一个白板应用程序。此应用程序需要设备的摄像头才能在实时流中显示白板。该设备可以与白板成一定角度放置,但仍会显示 "flat" 图像。非常类似于以一定角度拍摄照片,然后将图像倾斜成平面,就好像您直接在它的正前方拍摄照片一样。
我的问题是是否可以倾斜相机预览的 SurfaceView,以便我可以录制倾斜图像的视频而不是图像本身?
如果将其发送到 TextureView 而不是 SurfaceView,则可以应用转换矩阵。您可以在 Grafika 的 PlayMovieActivity 中看到一个简单的示例,其中 adjustAspectRatio()
应用矩阵来设置视频的纵横比。
如果您不熟悉矩阵变换,请查看 the answers here。
这假定您可以控制播放器,并且可以将 "skew this much" 值与视频一起发送给它。要修改实际视频,您需要在视频帧传输到编码器时将转换应用于视频帧。一种方法是将预览发送到 SurfaceTexture,通过适当的转换在 GLES 四边形上绘制它,然后使用 MediaCodec 编码器捕获 GLES 渲染。
直接捕捉并在播放时倾斜它会更容易。
这里有一些背景信息可以帮助解释这种情况。我的任务是构建一个白板应用程序。此应用程序需要设备的摄像头才能在实时流中显示白板。该设备可以与白板成一定角度放置,但仍会显示 "flat" 图像。非常类似于以一定角度拍摄照片,然后将图像倾斜成平面,就好像您直接在它的正前方拍摄照片一样。
我的问题是是否可以倾斜相机预览的 SurfaceView,以便我可以录制倾斜图像的视频而不是图像本身?
如果将其发送到 TextureView 而不是 SurfaceView,则可以应用转换矩阵。您可以在 Grafika 的 PlayMovieActivity 中看到一个简单的示例,其中 adjustAspectRatio()
应用矩阵来设置视频的纵横比。
如果您不熟悉矩阵变换,请查看 the answers here。
这假定您可以控制播放器,并且可以将 "skew this much" 值与视频一起发送给它。要修改实际视频,您需要在视频帧传输到编码器时将转换应用于视频帧。一种方法是将预览发送到 SurfaceTexture,通过适当的转换在 GLES 四边形上绘制它,然后使用 MediaCodec 编码器捕获 GLES 渲染。
直接捕捉并在播放时倾斜它会更容易。