#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",应该会得到以下图档:(本无外框与底色,但为了清楚于文章呈现,额外用绘图软件追加)
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 |