当相机在Android中的表面视图上以编程方式截屏

Posted

技术标签:

【中文标题】当相机在Android中的表面视图上以编程方式截屏【英文标题】:Programmatically screenshot when camera is live on surface view in Android 【发布时间】:2014-05-31 06:09:40 【问题描述】:

当相机在表面视图上时,我想以编程方式在 android 中截屏,我还在表面视图上膨胀了多个布局,但是当我尝试以编程方式截屏时,屏幕截图已被截取,但问题仍然存在有一个截图是黑色视图意味着我的图片是在屏幕截图中没有出现的表面视图。

【问题讨论】:

你能正确地提出你的问题吗? 是的,实际上我想在相机处于表面视图时以编程方式截取屏幕截图。我从前置摄像头拍摄我的照片,而不是相机意图。 AFAIK,您无法通过任何非根机制捕获SurfaceView 内容。 根本的问题是,如果你将 SurfaceView 的 Surface 交给相机进行预览,来自相机的帧永远不会出现在应用程序进程中。它们直接从相机(媒体服务器)到系统合成器(surfaceflinger)。如果您捕获到 SurfaceTexture 并使用 GLES 将其渲染到 SurfaceView 上,您可以使用 glReadPixels() 获取像素。 Android Take Screenshot of Surface View Shows Black Screen的可能重复 【参考方案1】:

你有没有尝试过这样的事情:

Process sh = Runtime.getRuntime().exec("su", null,null);
OutputStream  os = sh.getOutputStream();
os.write(("/system/bin/screencap -p " + "/sdcard/img.png").getBytes("ASCII"));
os.flush();

当然,这仅适用于您的设备已植根。

阅读:https://***.com/a/14718588/1374065

【讨论】:

这仅适用于有根手机...也可以从你得到这个的地方发布 我的项目中需要这样的东西,所以我做了一个截图服务。我想我在这里找到了这个:***.com/questions/16741302/how-to-take-a-screenshots。另外,我认为您不能截取表面的屏幕截图。 ***.com/questions/12724237/… 先生,这不起作用,因为我的设备没有路由。 好的,我在帖子底部提到了这一点。您正在尝试截取 SurfaceView 的屏幕截图吗?如果是这样,请阅读此***.com/questions/12724237/…

以上是关于当相机在Android中的表面视图上以编程方式截屏的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式在 Android 上截屏?

在 FrameLayout 中的自定义视图上以编程方式设置边距值

在 iPad 上以编程方式添加子视图,硬编码

Android:在方向更改时保留相机预览,而其他视图可以旋转

在android中使用没有预览或表面的相机

如何使用纹理视图而不是表面视图从相机直播视频?