Android:使用SurfaceView内容创建位图

Android:使用SurfaceView内容创建位图,android,image-processing,bitmap,save,surfaceview,Android,Image Processing,Bitmap,Save,Surfaceview,我恐怕已经有了这个问题的不幸答案,但以防万一。。。我正在使用SurfaceView对位图(灯光和颜色修改)进行一些图像处理,我需要将修改后的位图(即SurfaceView的内容)导入新位图,以便将其保存为图像文件 我四处看看,似乎可以从View.getDrawingCache()获取位图,但它不适用于SurfaceView。我得到的只是一个空位图 有什么解决办法吗 谢谢你能把你的SurfaceView画到一个有位图支持的画布上吗 // be sure to call the create

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

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

有什么解决办法吗


谢谢

你能把你的SurfaceView画到一个有位图支持的画布上吗

    // 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);

,因此您可以考虑使用TrutuVIEW而不是Survivew:位图可以使用<代码> TrutuVIEW .GETBITMAP()/>代码>方法.< /P> < P> API级别>=24,使用。 以下是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的源代码并对其进行修改,即可访问底层位图。

我想使用此解决方案,但无法使用SurfaceView,因为绘制过程是在线程中完成的,画布是从SurfaceHolder获得的。它是这样使用的:canvas=surfaceHolder.lockCanvas(null);已解决同步(surfaceHolder){doDraw(canvas);}问题。我将SurfaceView更改为简单的自定义视图。然后,在创建视图时启用drawingCache(setDrawingCacheAbled(true)),我就能够通过调用getDrawingCache()方法检索位图了。对于您的第一条评论,您不能用位图支持的画布调用doDraw吗<代码>如果(截图){doDraw(c_fromMyPost);}其他{doDraw(canvas_fromYourApp);}