View和SurfaceView绘制图像,从SurfaceView中获取不到图片

- 为啥从SurfaceView中获取不到图片- https://www.jianshu.com/p/05a8f7e1dd3d
普通View生成图片的原理,view.getDrawingCache()
public Bitmap getBitmapFromView(View view){
    if (view == null) {
        return null;
    }
    
    view.setDrawingCacheEnabled(true);
    Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
    view.setDrawingCacheEnabled(false);
    view.destroyDrawingCache();
    
    return bitmap;
}

 普通View生成图像的原理就是,生成一个新的Bitmap,把这个新的Bitmap设置给一个Canvas,然后再调用源View的Draw方法,将图像原型绘制到新Bitmap上。简单说,就是通过Canvas把源View的图像原型绘制到新Bitmap中,这样再将新Bitmap保存起来就得到了View的图像。

  在Android中绘制一个二维图像需要四个基本组件:
1、a Bitmap:保存图像像素数据(to hold the pixels)
2、a Canvas:包含一系列绘制和图像变换的方法(to host the draw calls,writing into the bitmap)
3、a drawing primitive:图像原型 (e.g. Rect, Path, text, Bitmap)
4、a paint:画笔描述绘制颜色、风格 (to describe the colors and styles for the drawing)
一句话描述:canvas 用画笔把图像原型绘制到bitmap上。

  View和SurfaceView上绘制图像,它们的共同点是都是用canvas来绘制图像。不同的地方是普通View是从复写的onDraw(Canvas canvas)方法中获取到canvas的,而SurfaceView是从surface中获取canvas来绘制的。

猜你喜欢

转载自blog.csdn.net/ShareUs/article/details/89842927
今日推荐