2014-10-10 66 views
4

我正在尝试实现包括在拍摄视频时拍照的功能。这就是我总结使用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.... 

万一你们可能会认为这是一个重复的问题,让我向你保证,我已经尝试提供了以下解决方案在问这个问题之前,对于同样的问题。

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

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

这都不是迄今为我工作。我也知道我们需要创建一些与Surface Holder交互并从中获取位图的Thread。但我不知道如何实现。

任何帮助都得到高度评价。

+1

上帝今天寄给我你。感谢这个问题 – 2015-12-04 13:19:25

+0

..我的快乐:) – 2015-12-30 19:00:54

+0

你能找出解决这个问题的办法吗? – Sheharyar 2016-02-08 11:21:25

回答

6

这是另一个:Take screenshot of SurfaceView

SurfaceViews有一个“表面”部分和一个“视图”部分;您的代码尝试捕获“视图”部分。 “表面”部分是一个单独的层,并没有微不足道的“抓住所有像素”的方法。基本的难点在于你的应用程序位于表面的“制作者”一侧,而不是“消费者”一侧,因此读取像素时出现问题。请注意,底层缓冲区以数据制作者最方便的格式存储,因此对于相机预览,它将成为YUV缓冲区。

“捕捉”表面像素的最简单和最有效的方法是绘制两次,一次用于屏幕,一次用于捕捉。如果你使用OpenGL ES来做到这一点,那么YUV到RGB的转换可能会由硬件模块来完成,这将比在YUV缓冲区中接收相机帧并进行自己的转换要快得多。

Grafika's“来自相机的纹理”活动演示了使用GLES处理传入视频数据的过程。渲染后,您可以获得glReadPixels()的像素。设备和不同用例之间的glReadPixels()的性能可能会有很大差异。 EglSurfaceBase#saveFrame()显示如何捕获到Bitmap并另存为PNG。

有关Android图形体系结构的更多信息,特别是SurfaceView表面的生产者 - 消费者性质,可以在this document中找到。

+0

感谢这个辉煌的回应=)Grafika是一个伟大的学习项目。 – 2014-10-13 10:02:43

+0

我无法找到'glReadPixels()'方法在相同的Activity'Texture'中的方法吗? – 2014-10-13 10:05:18

+0

''在'EglSurfaceBase#saveFrame()'中调用'glReadPixels()'。请参阅https://github.com/google/grafika/blob/master/src/com/android/grafika/gles/EglSurfaceBase.java#L157 – fadden 2014-10-13 14:34:55

相关问题