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

}

@Override

protected void onDraw(Canvas canvas) {

// TODO Auto-generated method stub

super.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");

}

}

android jni skia,Android NDK 调用Skia进行底层绘图相关推荐

  1. android jni不适用ndk,Android NDK编译之undefined reference to 'JNI_CreateJavaVM'

    利用Android NDK编译动态库,在C文件中调用了两个JNI函数:JNI_GetDefaultJavaVMInitArgs和JNI_CreateJavaVM.编译的时候始终报以下错误: XXX: ...

  2. 记录过程: Android Studio4.2通过NDK调用TNN(预编译的tnn so库)

    目录 0. 准备 1. 创建android ndk工程 2. 分析默认生成的工程 3. 写好java native接口 4. 实现这些java native方法(jni) 5. 修改cpp/CMake ...

  3. android jni总结,Android JNI总结.doc

    Android JNI总结 JNI总结 JNI有多重实现方式,一下会详细讲解多种方式: 1 应用级 用eclipse构建一个应用程序,JNITest1. Xml代码 < ?xml version ...

  4. android jni gbk,Android之NDK编码转(UTF8-GBK)

    基于NDK下的编码转换,当然是直接调用C/C++下的实现效率更高,下面介绍2种方案(不建议通过JNI调用JAVA的实现,尽管这样也能实现编码的转换). 1. 采用Android系统自带的libicuu ...

  5. android jni release,Android NDK 设置编译模式debug和release

    原文:http://stackoverflow.com/questions/14564918/android-ndk-release-build Unless you have created the ...

  6. android jni语法,Android NDK中的JNIEXPORT和JNICALL

    基本上是一个Windows问题,如果你看看oracle Java jdk附带的文件jni_md_win32.h这是宏定义: /* * @(#)jni_md.h 1.14 03/12/19 * * Co ...

  7. android jni framework,Android Framework层的JNI机制(二)

    Java框架层中有很多地方使用JNI机制,每一个部分的框架层代码,都可能有与之对应的JNI库.先了解Java框架层的组成,继续看一下JNI在框架层中的使用. Java框架层的组成 Java框架层的实体 ...

  8. android jni bitmap,android – 如何使用JNI位图操作来帮助避免...

    注意:这是一个有点旧的代码.对于最新的,请查看github上的项目页面. JNI / Android.mk LOCAL_PATH := $(call my-dir) #bitmap operation ...

  9. Android JNI for Android Studio 2.2 or higher

    点击浏览 官网说明 (要翻墙) 安装插件 需要打开SDK Manager 菜单栏 Tools>Android>SDK Manager 点击切换到 SDK Tools 选项卡 勾选 LLDB ...

最新文章

  1. springmvc和struts的区别
  2. Arraylist理解(3)删除元素
  3. 运维linux脚本实例,Shell脚本使用示例
  4. 什么是二次元?什么是二次元衍生创作?它的魅力何在?
  5. Linux操作系统实践
  6. 网课录屏用什么软件好?Camtasia极简操作,课程重点一目了然
  7. Word文档插入没有可用的联机内容
  8. 分享四款实用流程图模板
  9. 海义QQ群共享下载者的一些图例使用步骤教程
  10. java es 如何查询_使用elasticsearch的java-api进行查询
  11. 剑指Offer对答如流系列 - 用两个栈实现队列
  12. mac移动鼠标光标会变大_如何在Mac上使鼠标光标变大或变小
  13. windows11 取消windows登录密码 共享文件夹 输入法 去掉屏保广告 右键恢复原样
  14. 【OpenPrompt】源码学习笔记
  15. 使用ZPL控制Zebra打印机
  16. php 自动累加,excel自动累加公式是什么
  17. GPS北斗卫星授时系统(NTP同步时钟设备)应用和发展
  18. C++11 新特性。
  19. 使用python 520表白吧
  20. 【论文笔记】面向智能假肢手臂的生机接口系统与类神经协同控制

热门文章

  1. robotframework--浏览器驱动和操作的实现(1)
  2. 中国电信计算机专业面试的云计算问题,中国电信企业信息化类面试题和笔试题库(社会招聘和内部竞聘用题)...
  3. Opencv学习之:使用 opencv 将图片按照指定的帧率合成视频
  4. MySQL服务器时间同步问题
  5. 国外值得关注的十三家大数据与分析公司
  6. 网页设计(一)——HTML基础概念
  7. 【C++】GDAL读取HDF数据
  8. 车辆管理系统c语言课程设计报告,图书馆管理系统C语言课程设计报告
  9. 多种分隔符分割字符串
  10. Xilisoft iphone magic platinum for mac(苹果手机助手)