skia 库Skia 库是一个外部库,代码位于 external/skia/下面,生成的库名称是 libskia
Skia 库负责 2 维图形的绘制,绘制的结果最终一般以位图的形式存放在存的一块缓冲区中
我们可以从它里面几个比较重要的类来了解它到底完成什么功能
使用 SkCanvas,可以将绘制(drawing)结果保存到一个设备如位图(bitmap)中,这些绘制操作包含一系列几何图形的绘制,如绘制点、线、矩形、多边形、椭圆和圆弧等几何图形
Canvas
cpp 调用了 skia 库的 API,有的调用仅仅是对 SkCanvas 的简单包裹
绘制的状态(State)封装在 Paint 类中,如绘制的线条粗细、线条颜色、区域如何填充、线条形状等
SkBitmap 是光栅位图,它包含高度和宽度两个整数以与格式(配置 config 规定),也可以通过 getAddr()猎取存储实际像素(pixel)块的地址
一副图形可以通过它的像素位图来保存,也可以通过保存它的绘制过程通过 SkPicture 保存起来,然后写到文件里,最后通过绘制过程恢复图形
另外,skia 也包括将 YUV 格式转变为 Jpg 的编码,见 YuvToJpegEncoder
Java 部分通过 JNI 调用 Skia 关系如下,包括但不限于下图中的四个类
库 libsurfaceflinger_client
so库 libsurfaceflinger_client
so 到应用程序中,也到 server 侧(主要因为 layer state管理和存控制块等类),因此,其大多数类运行在应用程序所在进程空间中,它通过 Binder与与进程 sufaceflinger 进行交互
它的代码位于 frameworks/base/libs/surfaceflinger_client 下面,SurfaceCom