ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android – 在其中使用带有相机预览的SurfaceView的ScreenShot

2019-06-09 20:11:09  阅读:209  来源: 互联网

标签:android bitmap screenshot surfaceview


我正在尝试实现一种功能,包括录制视频时拍摄照片.这就是我结束使用SurfaceView的截图方法的原因.
但是,当我尝试使用SurfaceView的屏幕截图时.我总是得到一张空白图片.

这是我用于拍摄快照的代码:

View tempView = (View)MY_SURFACE_VIEW;
tempView.setDrawingCacheEnabled(true);
Bitmap tempBmp = Bitmap.createBitmap(tempView.getDrawingCache());
tempView.setDrawingCacheEnabled(false);
//Saving this Bitmap to a File....

如果您认为这是一个重复的问题,请允许我向您保证,在询问此问题之前,我已经尝试过针对相同问题在SO上提供的以下解决方案.

> https://stackoverflow.com/questions/24134964/issue-with-camera-picture-taken-snapshot-using-surfaceview-in-android
> Facing issue to take a screenshot while recording a video
> Take camera screenshot while recording – Like in Galaxy S3?
> Taking screen shot of a SurfaceView in android
> Get screenshot of surfaceView in Android(这是正确答案,但部分回答.我已经要求@sajar解释答案)

互联网上的其他资源:
1. http://www.coderanch.com/t/622613/Android/Mobile/capture-screenshot-simple-animation-project
2. http://www.phonesdevelopers.com/1795894/

到目前为止,这对我来说都没有.我也知道我们需要创建一些与Surface Holder交互并从中获取位图的Thread.但我不知道如何实现这一点.

任何帮助都得到高度赞赏.

解决方法:

这是另一个:Take screenshot of SurfaceView.

SurfaceViews有一个“表面”部分和一个“视图”部分;您的代码尝试捕获“视图”部分. “表面”部分是一个单独的层,并没有简单的“抓取所有像素”方法.基本的困难是你的应用程序位于表面的“生产者”一侧,而不是“消费者”方面,因此读取像素是有问题的.请注意,底层缓冲区采用的数据生成器最方便,因此对于相机预览,它将是YUV缓冲区.

“捕获”表面像素的最简单,最有效的方法是将它们绘制两次,一次用于屏幕,一次用于捕获.如果使用OpenGL ES执行此操作,则YUV到RGB转换可能由硬件模块完成,这比在YUV缓冲区中接收相机帧并进行自己的转换要快得多.

Grafika’s“相机纹理”活动演示了使用GLES操纵输入视频数据.渲染后,您可以使用glReadPixels()获取像素. glReadPixels()的性能可能因设备和不同的用例而有很大差异. EglSurfaceBase#saveFrame()显示如何捕获到位图并保存为PNG.

有关Android图形架构的更多信息,特别是SurfaceView曲面的生产者 – 消费者性质,可以在this document找到.

标签:android,bitmap,screenshot,surfaceview
来源: https://codeday.me/bug/20190609/1207183.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有