日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

android jni skia,Android NDK 调用Skia进行底层绘图

發(fā)布時(shí)間:2024/3/26 Android 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android jni skia,Android NDK 调用Skia进行底层绘图 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Skia是Android的底層的圖形庫(kù),最近看了一下參考了了網(wǎng)上的例子最初是這樣做的就是從上層直接傳一個(gè)Canvas再在底層獲取它

運(yùn)行的時(shí)候老是不成功,不過(guò)可以畫(huà)圖形,比如線(xiàn)、矩形等,最后在網(wǎng)上查了一下,大致是源代碼版本和庫(kù)不同導(dǎo)致的最后實(shí)在沒(méi)法了,我就直接傳一個(gè)Bitmap對(duì)象,再在底層

將文字和圖形寫(xiě)在上面,這樣就可以了

下面是底層代碼:

#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的調(diào)用

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

}

}

總結(jié)

以上是生活随笔為你收集整理的android jni skia,Android NDK 调用Skia进行底层绘图的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。