Skia簡介和圖形案例
Overview
Skia是一個開源的2D圖形庫癌压,提供各種常用的API涂召,并可在多種軟硬件平臺上運行麻捻。谷歌Chrome瀏覽器矾屯、Chrome OS兼蕊、Android、火狐瀏覽器件蚕、火狐操作系統(tǒng)以及其它許多產(chǎn)品都使用它作為圖形引擎孙技。
Skia由谷歌出資管理产禾,任何人都可基于BSD免費軟件許可證使用Skia。Skia開發(fā)團隊致力于開發(fā)其核心部分牵啦, 并廣泛采納各方對于Skia的開源貢獻亚情。
功能展示與圖形案例
下圖是一系列圖形案例,用來展示Skia可以實現(xiàn)的功能哈雏。因為內(nèi)容太多势似,瀏覽器無法渲染所有的圖形示例,導(dǎo)致一部分Demo沒有顯示出來僧著,變成了白色的方塊履因。
這張圖是Skia官方的示例圖:
API Reference
關(guān)鍵的類
- SkAutoCanvasRestore - Canvas save stack manager
- SkBitmap - two-dimensional raster pixel array
- SkBlendMode - pixel color arithmetic
- SkCanvas - drawing context
- SkColor - color encoding using integer numbers
- SkFont - text style and typeface
- SkImage - two dimensional array of pixels to draw
- SkImageInfo - pixel dimensions and characteristics
- SkIPoint - two integer coordinates
- SkIRect - integer rectangle
- SkMatrix - 3x3 transformation matrix
- SkPaint - color, stroke, font, effects
- SkPath - sequence of connected lines and curves
- SkPicture - sequence of drawing commands
- SkPixmap - pixel map: image info and pixel address
- SkPoint - two floating point coordinates
- SkRRect - floating point rounded rectangle
- SkRect - floating point rectangle
- SkRegion - compressed clipping mask
- SkSurface - drawing destination
- SkTextBlob - runs of glyphs
- SkTextBlobBuilder - constructor for runs of glyphs
API Overview
SkCanvas
是Skia的核心,Skia的邏輯都是圍繞著 SkCanvas 對象組織的盹愚。drawRect
, drawPath
, drawText
等所有的draw calls
(繪制命令)都由 SkCanvas 來管理栅迄。
draw calls 由兩個部分構(gòu)成:
-
primitive
(圖元)-SkRect
,SkPath
, etc. -
color/style attributes
(顏色/樣式屬性)-SkPaint
SkCanvas指明畫在哪里(where),primitive聲明要畫什么(what)皆怕,SkPaint說明怎么畫(how)毅舆。
canvas->drawRect(rect, paint);
所以上面的代碼的含義是:在給定的畫布(canvas)上繪制一個矩形,paint參數(shù)用來描述如何繪制這個矩形愈腾,其中包含大量的狀態(tài)用來描述:矩形是什么顏色憋活,矩形是填充還是描邊,應(yīng)該如何與先前繪制的顏色混合虱黄。
相對于Paint悦即,Canvas維護的狀態(tài)較少,它的作用是:
- 指向要繪制的實際像素
- 維護
matrices
(矩陣)和clips
(裁剪)等操作的棧
因此橱乱,在上述調(diào)用中辜梳,canvas的矩陣操作可以轉(zhuǎn)換矩形的坐標(平移,旋轉(zhuǎn)泳叠,傾斜作瞄,透視),并且canvas的剪輯操作可以限制矩形在畫布上繪制的位置危纫,除此之外所有其他樣式繪圖的屬性都由paint控制宗挥。