从SurfaceView获取框架

Che*_*hen 4 android screenshot surfaceview

我现在遇到的困难是拍摄SurfaceView的屏幕截图。谁能帮忙吗?

我的团队正在做一个Android项目,我们在其中使用MediaCodec解码视频提要并将提要呈现到Surface上。活动实施

SurfaceHolder.Callback
Run Code Online (Sandbox Code Playgroud)

然后,我们创建了一个SurfaceView并添加了回调:

mySurfaveView.getHolder().addCallback(this);
Run Code Online (Sandbox Code Playgroud)

然后,我们开始解码视频提要(我们有一种方法可以解码)

surfaceChanged(SurfaceHolder holder, int format, int width, int height)
Run Code Online (Sandbox Code Playgroud)

视频工作正常,现在我想截取渲染到SurfaceView上的屏幕截图。我尝试了几种方法来做到这一点,但没有成功。以下是我尝试过的方法:

  1. 我已经厌倦了获得rootView的drawingcache。
  2. 尝试直接从MediaCodec获取框架。
  3. 尝试使用draw()方法在画布上绘制。

到目前为止,我正试图创建一个自定义的SurfaceView并在那里重写onDraw方法。但是,我从未创建过自定义SurfaceView。我的方向正确吗?

请帮忙。谢谢!

fad*_*den 5

另一个问题所述,您无法捕获SurfaceView 。

SurfaceViews很少要重写onDraw()。通常,SurfaceView的View部分是一个透明孔。

对于MediaCodec输出的特定情况,您有两种选择。您可以将输出定向SurfaceTexture,然后使用OpenGL ES两次渲染视频帧。一次进入SurfaceView进行显示,一次进入屏幕外的缓冲区,您可以从该缓冲区捕获像素。

另一种方法是将SurfaceView替换为TextureView,然后使用该getBitmap()调用来捕获视频帧。

可以在Grafika中找到各种示例。