android skia 使用執行個體

來源:互聯網
上載者:User

#include "SkBitmap.h"

#include "SkDevice.h"

#include "SkPaint.h"

 

#include "SkRect.h"

#include "SkImageEncoder.h"

 

int main()

{

        // Declare a raster bitmap, which has an integer width and height,

        // and a format (config), and a pointer to the actual pixels.

        // Bitmaps can be drawn into a SkCanvas, but they are also used to

 

        // specify the target of a SkCanvas' drawing operations.

        SkBitmap bitmap;

        bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200);

        bitmap.allocPixels();

 

        // A Canvas encapsulates all of the state about drawing into a

        // device (bitmap).  This includes a reference to the device itself,

        // and a stack of matrix/clip values. For any given draw call (e.g.

        // drawRect), the geometry of the object being drawn is transformed

        // by the concatenation of all the matrices in the stack. The

        // transformed geometry is clipped by the intersection of all of the

 

        // clips in the stack.

        SkCanvas canvas(new SkDevice(bitmap));

 

        // SkPaint class holds the style and color information about how to

        // draw geometries, text and bitmaps.

        SkPaint paint;

 

        // SkIRect holds four 32 bit integer coordinates for a rectangle.

 

        SkRect r;

 

        paint.setARGB(255, 255, 0, 0);

        r.set(25, 25, 145, 145);

        canvas.drawRect(r, paint);

 

        paint.setARGB(255, 0, 255, 0);

        r.offset(20, 20);

        canvas.drawRect(r, paint);

 

        paint.setARGB(255, 0, 0, 255);

        r.offset(20, 20);

        canvas.drawRect(r, paint);

 

        // SkImageEncoder is the base class for encoding compressed images

        // from a specific SkBitmap.

        SkImageEncoder::EncodeFile("snapshot.png", bitmap,

               SkImageEncoder::kPNG_Type,

               100);

        return 0;

}

編譯方式:

g++ \

        -I./include \

        -I./include/core \

        -I./include/images \                                                              

        -Wall -o test-skia test-skia.c \

        out/src/images/SkImageDecoder_libpng.o out/libskia.a \

        -lpng -lpthread -g

筆者做了簡要的批註,大概可知曉 Sk 開頭的這些 API 的功用,而上述的範常式序一開始就要求 Skia 配置畫布 (SkCanvas),接著透過一份 SkRect 對象 r,給定 ARGB 的描述,使其有著不同的顏色,再來就是調整向量對象的位移並繪製。正如前文提及,Skia 僅是繪圖引擎,並未如 Cairo 一般廣泛對應到 PDF, X11, GDI 等等底層繪圖裝置,所以為了方便觀察繪圖結果,我們透過 Skia 內建的 image codec 來輸出 PNG 圖檔,所以執行前述編譯後的執行檔
"test-skia",應該會得到以檔:(本無外框與底色,但為了清楚於文章呈現,額外用繪圖軟體追加)

 

迭合的三個不同色的矩形對象,就是透過以下 API 呼叫達成:

        paint.setARGB(255, 0, 255, 0);

        r.offset(20, 20);

        canvas.drawRect(r, paint);

由於 Skia 與 Cairo 的同構型相當高,也可參照 [Cairo :: documentation] 建立所需的背景知識。

轉載,

原地址:http://blog.sina.com.cn/s/blog_4a0a39c30100cog4.html

另外一個例子:

#include "SkBitmap.h"#include "SkDevice.h"#include "SkPaint.h"#include "SkRect.h"#include <cairo.h>int main(){  SkBitmap bitmap;  bitmap.setConfig(SkBitmap::kARGB_8888_Config, 100, 100);  bitmap.allocPixels();  SkDevice device(bitmap);  SkCanvas canvas(&device);  SkPaint paint;  SkRect r;  paint.setARGB(255, 255, 255, 255);  r.set(10, 10, 20, 20);  canvas.drawRect(r, paint);  paint.setARGB(255, 255, 0, 0);  r.offset(5, 5);  canvas.drawRect(r, paint);  paint.setARGB(255, 0, 0, 255);  r.offset(5, 5);  canvas.drawRect(r, paint);  {    SkAutoLockPixels image_lock(bitmap);    cairo_surface_t* surface = cairo_image_surface_create_for_data(        (unsigned char*)bitmap.getPixels(), CAIRO_FORMAT_ARGB32,        bitmap.width(), bitmap.height(), bitmap.rowBytes());    cairo_surface_write_to_png(surface, "snapshot.png");    cairo_surface_destroy(surface);  }  return 0;}原地址:http://www.linuxgraphics.cn/android/skia.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.