11

恐怕已经对这个问题给出了不幸的答案,但以防万一......我正在使用 SurfaceView 对位图(灯光和颜色修改)进行一些图像处理,我需要导入修改后的位图(即SurfaceView 的内容)在一个新的位图中,以便我可以将其保存为图像文件。

我一直在环顾四周,似乎可以从 View.getDrawingCache() 获取位图,但它不适用于 SurfaceView。我得到的只是一个空位图。

有什么解决办法吗?

谢谢

4

4 回答 4

8

您可以将 SurfaceView 绘制到由位图支持的 Canvas 上吗?

    // be sure to call the createBitmap that returns a mutable Bitmap
    Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888); 
    Canvas c = new Canvas(b);
    yourSurfaceView.draw(c);
于 2011-01-20T02:24:42.637 回答
5

对于 API 级别 >=24,请使用PixelCopy API。这是 ImageView 中的一个示例:

public void DrawBitmap(){
    Bitmap surfaceBitmap = Bitmap.createBitmap(600, 600, Bitmap.Config.ARGB_8888);
    PixelCopy.OnPixelCopyFinishedListener listener = copyResult -> {
        // success/failure callback
    };

    PixelCopy.request(YourSurfaceView, surfaceBitmap,listener,getHandler());
    // visualize the retrieved bitmap on your imageview
    setImageBitmap(plotBitmap);
    }
}
于 2019-01-11T19:40:55.530 回答
3

SurfaceView 没有简单的抓帧方法,可以考虑使用 TextureView 代替 SurfaceView:可以使用textureView.getBitmap()方法获取 Bitmap。

于 2016-09-20T14:10:12.003 回答
0

只需获取 SurfaceView 的源代码并对其进行修改,即可访问底层位图。

于 2021-04-25T07:30:24.690 回答