Android NDK 调用Skia进行底层绘图

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



  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值