Android:使用SurfaceView内容创建位图

Nic*_* P. 10 android bitmap image-processing save surfaceview

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

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

这有什么解决方案吗?

谢谢

idb*_*rii 6

你能将SurfaceView绘制到由Bitmap支持的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);
Run Code Online (Sandbox Code Playgroud)

  • 问题解决了.我将SurfaceView更改为简单的自定义视图.然后,在创建视图时启用drawingCache(setDrawingCacheEnabled(true)),我能够检索调用getDrawingCache()方法的位图. (8认同)
  • 我尝试了这种方法并获得了黑色位图. (7认同)
  • 我想使用这个解决方案,但使用 SurfaceViews 是不可能的,因为绘图过程是在线程中完成的,并且画布是从 SurfaceHolder 获取的。它的使用方式如下:canvas = surfaceHolder.lockCanvas(null); 同步(surfaceHolder){ doDraw(画布); } (3认同)

pal*_*one 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);
    }
}
Run Code Online (Sandbox Code Playgroud)