我正在尝试从TextureView获取每个帧,不幸的是尝试:

textureView.getBitmap();

导致性能下降的原因是有一种更快的获取位图的方法。改用NDK更好吗?

寻找实际示例

最佳答案

TextureView在SurfaceTexture上接收帧,SurfaceTexture接收发送到其Surface的帧并将其转换为GLES纹理。为了获取像素数据,必须将纹理渲染到帧缓冲区,然后使用glReadPixels()进行读取。像素数据然后可以用位图对象包装(可能涉及也可能不涉及复制像素数据)。

使用NDK不会给您带来什么好处,因为所有需要快速运行的代码已经在本地实现。

通过将数据直接发送到SurfaceTexture并自行完成GLES工作,您可能会看到一些改进,但是大概您希望在TextureView中显示传入的帧,因此,您可能节省的只是Bitmap开销(可能会或可能不会)是重要的)。

如果您在问题中解释框架的来源和用途,这可能会有所帮助。

关于android - 有效地从TextureView获取位图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36252437/

10-09 07:05