恐怕已经对这个问题给出了不幸的答案,但以防万一......我正在使用 SurfaceView 对位图(灯光和颜色修改)进行一些图像处理,我需要导入修改后的位图(即SurfaceView 的内容)在一个新的位图中,以便我可以将其保存为图像文件。
我一直在环顾四周,似乎可以从 View.getDrawingCache() 获取位图,但它不适用于 SurfaceView。我得到的只是一个空位图。
有什么解决办法吗?
谢谢
恐怕已经对这个问题给出了不幸的答案,但以防万一......我正在使用 SurfaceView 对位图(灯光和颜色修改)进行一些图像处理,我需要导入修改后的位图(即SurfaceView 的内容)在一个新的位图中,以便我可以将其保存为图像文件。
我一直在环顾四周,似乎可以从 View.getDrawingCache() 获取位图,但它不适用于 SurfaceView。我得到的只是一个空位图。
有什么解决办法吗?
谢谢
您可以将 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);
对于 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);
}
}
SurfaceView 没有简单的抓帧方法,可以考虑使用 TextureView 代替 SurfaceView:可以使用textureView.getBitmap()
方法获取 Bitmap。
只需获取 SurfaceView 的源代码并对其进行修改,即可访问底层位图。