#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 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



更多相关文章

  1. Android的跨进程通信介绍----------------aidl,传递复杂对象以及S
  2. listView显示对象以及access any RESTFull service that uses JS
  3. android 面向对象数据库 db40使用demo
  4. 33、Android 中子fragment控制父对象改变布局
  5. Android 中的Parcelable序列化对象
  6. Android样式化的定型对象 — Style样式的定义
  7. 对android里布局文件当中的TextView对象设置事件监听,但是不响应
  8. Retrofit系列文章翻译7—在请求体里发送对象

随机推荐

  1. Android(安卓)API :SMS短信服务处理和获取
  2. 基于移动平台的多媒体框架——移植SDL到A
  3. android学习——使Android开发方便快捷的
  4. android 在ScrollView中嵌入GridView
  5. Android(安卓)APP设计加载使用gif动图需
  6. Android系统定制之源码完美下载(一)
  7. Android(安卓)OpenCV(三十一):图像形态学
  8. Android模拟器正确应用与安装方法
  9. Android通过蓝牙HC06与Arduino通信实例
  10. 『叫兽学堂』手把手教你如何正确启动Andr