从 SurfaceView 获取位图
Posted
技术标签:
【中文标题】从 SurfaceView 获取位图【英文标题】:Get Bitmap from SurfaceView 【发布时间】:2018-02-27 08:38:42 【问题描述】:我需要将 SurfaceView 的内容转换为位图。我尝试在 SurfaceView 中使用以下代码 sn-p 来实现这一点:
public final Bitmap getScreenCopy()
Bitmap bitmap = Bitmap.createBitmap(
getWidth(),
getHeight(),
Bitmap.Config.ARGB_8888
);
Canvas temporaryCanvas = new Canvas(bitmap);
draw(temporaryCanvas); // Voodoo.
return bitmap;
我从那架无人机收到的位图似乎是透明的,有人知道如何解决吗?
使用 TextureView 是不可能的,因为我使用 Parrot SDK 并且无人机需要 SurfaceView 来显示 Frames。
【问题讨论】:
android: creating a Bitmap with SurfaceView content的可能重复 ***.com/questions/14181498/… 我已经检查过了,对我不起作用 【参考方案1】:我也一直在尝试找到一种方法来实现这一点,但到目前为止,我还没有找到一种方法来为 API 级别低于 24 的设备做到这一点。我试图弄乱绘图缓存,但我什么也没得到透明度。我没想到 drawingCache 方法会起作用,因为视图本身什么也没画,一切都在Surface
上。
对于 API 级别 24 和更高级别,您可以使用 PixelCopy APIs 将全部或部分 SurfaceView
复制到位图中。
这是我的 (Kotlin) 代码中的一个 sn-p:
override fun getPlotBitmap(view: PlotSurfaceView) = Single.create<Bitmap>
val plotBitmap = Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888)
val listener = PixelCopy.OnPixelCopyFinishedListener copyResult ->
when (copyResult)
PixelCopy.SUCCESS ->
it.onSuccess(plotBitmap)
else ->
it.onError(RuntimeException("Pixel copy failed with result $copyResult"))
PixelCopy.request(view, plotBitmap, listener, view.handler)
【讨论】:
以上是关于从 SurfaceView 获取位图的主要内容,如果未能解决你的问题,请参考以下文章
Android使用SurfaceView搭建OpenGL环境
Android使用SurfaceView搭建OpenGL环境
Android使用SurfaceView搭建OpenGL环境