android jni skia,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");
}
}
總結
以上是生活随笔為你收集整理的android jni skia,Android NDK 调用Skia进行底层绘图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Bug总是找不到?试试小黄鸭调试法吧
- 下一篇: 音乐类编曲软件——水果FL Studio