In Android Java:
public class SkiaDrawView extends View {
public Bitmap fSkiaBitmap;
public SkiaDrawView(Context ctx, AttributeSet attr) {
super(ctx, attr);
}
@Override
public void onSizeChanged(int w, int h, int oldw, int oldh)
{
fSkiaBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
}
@Override
public void onDraw(Canvas canvas)
{
fun1(fSkiaBitmap);
canvas.drawBitmap(fSkiaBitmap, 0, 0, null);
}
public native void fun1(Bitmap bitmap);
}
Jni:
JNIEXPORT void JNICALL Java_com_example_viewdraw_viewdrawinndkskiausestaticlib_SkiaDrawView_fun1(JNIEnv * env, jobject obj, jobject dstBitmap)
{
AndroidBitmapInfo dstInfo;
AndroidBitmap_getInfo(env, dstBitmap, &dstInfo);
//draw SkBitmap;
SkImageInfo imageInfo = SkImageInfo::MakeN32Premul(dstInfo.width, dstInfo.height);
SkBitmap bitmap;
bitmap.allocPixels(imageInfo);
// if(!bitmap.tryAllocPixels(imageInfo))
// {
// __android_log_print(ANDROID_LOG_INFO, "YimaLib_ViewDraw", "bitmap.tryAllocPixels faild...");
// return;
// }
SkCanvas canvas(bitmap);
canvas.drawColor(SK_ColorRED);
void *dstPixels;
AndroidBitmap_lockPixels(env, dstBitmap, &dstPixels);
//bitmap.lockPixels(); //when use this: build error:undefined reference to 'SkBitmap::lockPixels() const'
memcpy(dstPixels, bitmap.getPixels(), dstInfo.width*dstInfo.height*4); // the bitmap.getPixels() is null, I want copying bitmap to dstBitmap, what I should do ?
AndroidBitmap_unlockPixels(env, dstBitmap);
}
I want draw something in SkBitmap in C++, and then show in Android View Use android.graphics.Bitmap.