Skia引擎API整理

來源:互聯網
上載者:User



通過google, baidu,我們都很難搜尋到關於skia引擎方面的文檔,skia的官方wiki(http://code.google.com/p/skia)也只有寥寥無幾的文字簡單介紹了SkCanvas,
SkBitmap等幾個主要的class,我通過分析原始碼,查看jni介面對skia引擎的封裝,總結和翻譯了下面的一些文字,希望對想在Android平台進行native畫圖的朋友有所協助,當然,你也可以直接使用OpenGL來畫圖。

  Skia引擎在android原始碼庫當中的位置

  • 標頭檔(也可以說是internal API, 因為google沒有在NDK裡面提供他)位置:android/external/skia/include。其中還包含以下幾個子目錄:animator, core, effects, images, views..., 最重要的就是core目錄了,我們在這裡的分析也主要針對core目錄裡面的API。
  • 源檔案位於: android/external/skia/src目錄,子目錄結構和標頭檔目錄相同。
  • 封裝層:android對Skia引擎進行了封裝,以便讓java代碼方便的調用,對skia封裝的代碼存在於android/framework/base/core/jni以及android/framework/base/core/jni/android/graphics目錄下面。主要是對Canvas, Bitmap, Graphics, Picture等等的封裝,以及和libui庫的結合使用。


Skia引擎重要類簡介

(PS: 注意是簡介了,觀眾不要要求太高,我也是在摸索中整理的文檔)

  1. SkCanvas
     這個類是Skia引擎的一個核心類,他封裝了所有對裝置進行的畫圖操作。這個類自身包含了一個裝置的引用,以及一個矩陣和裁剪棧。所有的畫圖操作,都是在經過棧記憶體放的矩陣變幻之後才進行的(這點和OpenGL類似)。當然,最終顯示給使用者的映像,還必須經過裁剪堆棧的運算。

     SkCanvas記錄著整個裝置的繪畫狀態,而裝置上面繪製的對象的狀態又是由SkPaint類來記錄的,SkPaint類作為參數,傳遞給不同SkCanvas類的成員函數drawXXXX().(比如:drawPoints, drawLine, drawRect, drawCircle)。SkPaint類裡記錄著如顏色(color), 字型(typeface), 文字大小(textSize), 文字粗細(strokeWidth), 漸層(gradients, patterns)等。

     SkCanvas類的主要成員函數:

         > 建構函式,給定一個Bitmap或者Device,在給定的這個對象上進行畫圖,Device可以為空白。

            SkCanvas(const SkBitmap& bitmap);

            SkCanvas(SkDevice* device = NULL);

         > setViewport, getViewport, 這2個函數只有在支援OpenGL視圖時才有效。

         > save, saveLayer, saveLayerAlpha, restore, 這4個函數用於儲存和恢複顯示矩陣,剪下,過濾堆棧,不同函數有不同的附加功能。

         > 移位,縮放,旋轉,變形函數。

            translate(SkiaScalar dx, SkiaScalar dy);

            scale(SkScalar sx, SkScalar sy);

            rotate(SkScalar degrees);

            skew(SkScalar sx, SkScalar sy);

         > 指定具體矩陣,進行相應的變換的函數,以上4個方法都可以通過定義特定的矩陣,再調用此函數實現。

            cancat(const SkMatrix& matrix);

         > 映像剪輯,把指定的地區顯示出來。

            clipRect(SkRect&...);

            clipPath(SkPath&...);

            clipRegion(SkRegion&...);

         > 在當前畫布內畫圖,有以下多種畫圖方式:

            drawARGB(u8 a, u8 r, u8 g, u8 b....) 給定透明度以及紅,綠,蘭3色,填充整個可繪製地區。

            drawColor(SkColor color...) 給定顏色color, 填充整個繪製地區。

            drawPaint(SkPaint& paint) 用指定的畫筆填充整個地區。

            drawPoint(...)/drawPoints(...) 根據各種不同參數繪製不同的點。

            drawLine(x0, y0, x1, y1, paint) 畫線,起點(x0, y0), 終點(x1, y1), 使用paint作為畫筆。

            drawRect(rect, paint) 畫矩形,矩形大小由rect指定,畫筆由paint指定。

            drawRectCoords(left, top, right, bottom, paint), 給定4個邊界畫矩陣。

            drawOval(SkRect& oval, SkPaint& paint) 畫橢圓,橢圓大小由oval矩形指定。

            drawCicle(cx, cy, radius, paint), 給定圓心座標和半徑畫圓。

            drawArcSkRect& oval...) 畫弧線,用法類似於畫橢圓。

            drawRoundRect(rect, rx, ry, paint) 畫圓角矩形,x, y方向的弧度用rx, ry指定。

            drawPath(path, paint) 路徑繪製,根據path指定的路徑繪製路徑。

            drawBitmap(SkBitmap& bitmap, left, top, paint = NULL) 繪製指定的位元影像, paint可以為空白。

            drawBitmapRect(bitmap, src, dest, paint=NULL), 繪製給定位元影像的一部分地區,此地區由src指定,然後把截取的部分位元影像繪製到dest指定的地區,可能進行縮放。

            drawBitmapMatrix(bitmap, matrix, paint=NULL), 功效同上,可以通過給定矩陣來進行裁剪和縮放變換。

            drawSprite(bitmap, left, top, paint=NULL), 繪製位元影像,不受當前變換矩陣影響。

            drawText(void* text, byteLength, x, y, paint), 以(x,y)為起始點寫文字,文字儲存在text指標內,長度有byteLength指定。

            drawPosText(...) 功能同上,不過每個文字可以單獨指定位置。

            drawPosTextH(...) 功能同上,不過由一個變數指定了當前所有文字的統一Y座標,即在同一條水平線上以不同的間隔寫字。

            drawTextOnPathHV, drawTextOnPath, drawTextOnPath, 以不同方式在給點定的path上面繪製文字。

            drawPicture(SkPicture& picture) 在畫布上繪製圖片,比較高效的繪圖函數。

            drawShape(SkShape*) 在畫布上繪製指定形狀的映像。

            drawVertices(...) 繪製點,可以有紋理,顏色,等附加選項。

轉載地址:http://www.meegozu.com

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.