Skia是Android的底层的图形库,最近看了一下参考了了网上的例子最初是这样做的就是从上层直接传一个Canvas再在底层获取它

运行的时候老是不成功,不过可以画图形,比如线、矩形等,最后在网上查了一下,大致是源代码版本和库不同导致的最后实在没法了,我就直接传一个Bitmap对象,再在底层

将文字和图形写在上面,这样就可以了

下面是底层代码:

#include "SkRect.h"#include "SkImageEncoder.h"static JNIEnv *env=NULL;static int nMethods=1;const char* classname="mytest/com/sam/NativeMethods";extern "C"{void jni_renderhello(JNIEnv *env,jobject ob,jobject bitmap);};static JNINativeMethod gMethods[] = {{"test","(Landroid/graphics/Bitmap;)V",(void *)jni_renderhello},};void jni_renderhello(JNIEnv * env, jobject  obj, jobject bitmap)  {  AndroidBitmapInfo  info;  int*              pixels;  int ret;  ret = AndroidBitmap_getInfo(env, bitmap, &info);  ret = AndroidBitmap_lockPixels(env, bitmap, (void**)&pixels);  int width=(int)info.width;  int height=(int)info.height;  SkBitmap bmp = SkBitmap();  bmp.setConfig(SkBitmap::kARGB_8888_Config,width,height,0);  bmp.setPixels((void*)pixels);  SkCanvas backgroud(bmp);  SkPaint paint;paint.setColor(SK_ColorGRAY);SkRect rect;rect.set(0,0,width,height);backgroud.drawRect(rect,paint);paint.setColor(SK_ColorGREEN);const char *str="Hello Skia";paint.setTextSize(30);backgroud.drawText(str,strlen(str), 0, 100 , paint);}jint JNI_OnLoad(JavaVM* vm, void* reserved){jint result=-1;jclass clz=NULL;if(vm->GetEnv((void**)&env,JNI_VERSION_1_4)!=JNI_OK)return -1;clz=env->FindClass(classname);if(env->RegisterNatives(clz,gMethods,nMethods)<0)return -1;return JNI_VERSION_1_4;}


这是java的调用

public class MyTestActivity extends Activity {    /** Called when the activity is first created. */MyView view;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        view=new MyView(this);        setContentView(view);    }}class MyView extends View{public MyView(Context context) {super(context);// TODO Auto-generated constructor stub}@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stubsuper.onDraw(canvas);NativeMethods method=new NativeMethods();Bitmap bm=Bitmap.createBitmap(canvas.getWidth(),canvas.getHeight(), Config.ARGB_8888);final Paint paint = new Paint();method.test(bm);canvas.drawBitmap(bm, 0, 0, paint);}}class NativeMethods{public native void test(Bitmap canvas);static{System.loadLibrary("Skiademo");}}



更多相关文章

  1. 移植ffmpeg中的H264解码部分到Android
  2. android的gralloc分析
  3. 框架设计之ADO.NET Command的ExecuteScalar误用情景及底层解说
  4. Android(安卓)直接显示yuv数据 通过Awesomeplayer方式直接显示(三
  5. android-opengles3.0开发-2-绘制图形
  6. Android(安卓)实现圆角按钮(selector和shape的简单用法)
  7. application中 android:icon 和 android:roundIcon 的区别
  8. 我是一只忍者神龟.
  9. Android(安卓)自定义View系列之必备api

随机推荐

  1. MySQL触发器基本用法详解【创建、查看、
  2. mysql 触发器创建与使用方法示例
  3. MYSQL 性能分析器 EXPLAIN 用法实例分析
  4. MySQL与sqlyog安装教程图文详解
  5. mysql 触发器语法与应用示例
  6. MySQL联表查询基本操作之left-join常见的
  7. MySQL8新特性之降序索引底层实现详解
  8. mysql8.0.20安装与连接navicat的方法及注
  9. MySQL 编码utf8 与 utf8mb4 utf8mb4_unic
  10. 源码编译安装MySQL8.0.20的详细教程