我现在遇到的困难是截取SurfaceView的截图。有人可以帮忙吗?
我的团队正在进行Android项目,我们使用MediaCodec解码视频Feed并将Feed渲染到Surface上。 活动实现
SurfaceHolder.Callback
然后我们创建了一个SurfaceView并添加了Callback:
mySurfaveView.getHolder().addCallback(this);
然后我们开始解码视频输入(我们有一个解码方法)
surfaceChanged(SurfaceHolder holder, int format, int width, int height)
视频工作正常,现在我想截取渲染到SurfaceView上的内容。我已经尝试了几种方法来做到这一点,但我没有成功。以下是我的尝试:
到目前为止,我想创建一个自定义SurfaceView并覆盖那里的onDraw方法。但是,我从未创建过自定义SurfaceView。我正朝着正确的方向前进吗?
请帮助。谢谢!
答案 0 :(得分:3)
您无法捕获SurfaceView,如此other question中所述。
SurfaceViews很少想要覆盖onDraw()
。通常,SurfaceView的View部分是一个透明孔。
对于MediaCodec输出的特定情况,您有几个选择。您可以将输出定向到SurfaceTexture,然后使用OpenGL ES渲染视频帧两次。一旦进入SurfaceView进行显示,一次到屏幕外缓冲区,您可以从中捕获像素。
另一种方法是使用TextureView替换SurfaceView,然后使用getBitmap()
调用来抓取视频帧。
可以在Grafika中找到各种示例。