【问题标题】:Get Bitmap from SurfaceView从 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 surfaceview


【解决方案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)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多