I\'m afraid to already have the unfortunate answer to this question but just in case... I\'m using a SurfaceView to do some image processing with bitmaps (lights and colors
There is no simple way to capture frames of SurfaceView, so you can consider using TextureView instead of SurfaceView: the Bitmap can be retrieved using textureView.getBitmap()
method.
Can you draw your SurfaceView onto a Canvas that's backed by a Bitmap?
// 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);
For API levels >=24, use the PixelCopy API. Here's an example inside an 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);
}
}