canvas教程

android jni 用skia画图,运行后模拟器上没显示,求解啊

字号+ 作者:H5之家 来源:H5之家 2016-09-02 12:00 我要评论( )

本菜鸟最近在学习androidjniskia画图,从网上找的例子,运行后模拟器上没有显示,不知道该怎么做。下面是我的代码: java部分: publicclassMainActivityextendsActivity{ privatenativevoidcode1();//jni @Override publicvoidonCreate(BundlesavedInstance

本菜鸟最近在学习android jni skia画图,从网上找的例子,运行后模拟器上没有显示,不知道该怎么做。下面是我的代码:
java部分:
public class MainActivity extends Activity {
private native void code1(); //jni
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        code1();
    }
}
c++部分:
JNIEXPORT void JNICALL Java_com_pic_MainActivity_code1(JNIEnv* env,jobject obj)
{
LOGI("in good");
LOGI("in callcode1");
    SkBitmap bitmap;
    bitmap.setConfig(SkBitmap::kARGB_8888_Config,200,200);
    bitmap.allocPixels();
    SkCanvas canvas(new SkDevice(bitmap));
    SkPaint paint;
LOGI("in callcode2");
    // draw points with red.
    paint.setARGB(255, 255, 0, 0);
  //  paint.setStrokeWidth(4);
LOGI("in callcode3");
    canvas.drawPoint(40,30, paint);
    canvas.drawPoint(80,60, paint);
    canvas.drawPoint(120,90, paint);
LOGI("in callcode4");
SkRect r;
paint.setARGB(255, 255, 0, 0);
r.set(25, 25, 145, 145);
canvas.drawRect(r, paint);
    //draw a line with green.
    paint.setARGB(255, 0, 255, 0);
    paint.setStrokeWidth(4);
    canvas.drawLine(160,10,320,110,paint);
    //draw a circle with bule.
    paint.setARGB(255, 0, 0, 255);
    canvas.drawCircle(80,180,50,paint);
  //  canvas.setBitmapDevice(SkBitmap());
    LOGI("in callcode5");
    SkImageEncoder::EncodeFile("snapshot.png", bitmap,SkImageEncoder::kPNG_Type,100);

LOGI("out callcode1");
}

如果上面的代码是错误的,请给出一个完整的代码!!!

2012-11-09 14:01:39 whosyour_dady 楼主

1个回答

从java中传一个Bitmap到jni。
      DisplayMetrics metrics = new DisplayMetrics();    //获取分辨率大小
      this.getWindowManager().getDefaultDisplay().getMetrics(metrics);           
      int width = metrics.widthPixels;   
      int height = metrics.heightPixels;  
       Bitmap dst=Bitmap.createBitmap(width, height, Config.ARGB_8888);//设置Bitmap的大小和颜色格式
        test(dst);  //把画布传过去
        ImageView  iv = new ImageView(this);
        iv.setImageBitmap(dst);
        setContentView(iv);
jni的接口中加上 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);
         。。。。画图。。。
       AndroidBitmap_unlockPixels(env, bitmap);

ok!!!

2012-11-12 11:11:36 goog_guzl 1楼

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Android的Paint、Canvas和Matrix讲解

    Android的Paint、Canvas和Matrix讲解

    2016-09-02 13:00

  • Android开发就业前景

    Android开发就业前景

    2016-09-02 11:00

  • Android:解析自定义view之圆形头像的各类方案

    Android:解析自定义view之圆形头像的各类方案

    2016-09-02 10:00

  • Cardboard虚拟现实开发技巧(一)之放置一个固定在视野中的物体

    Cardboard虚拟现实开发技巧(一)之放置一个固定在视野中的物体

    2016-08-31 16:00

网友点评
c