@@ -326,8 +326,8 @@ static void android_view_GLES20Canvas_concatMatrix(JNIEnv* env, jobject clazz,
326326// ----------------------------------------------------------------------------
327327
328328static void android_view_GLES20Canvas_drawBitmap (JNIEnv* env, jobject clazz,
329- OpenGLRenderer* renderer, SkBitmap* bitmap, jbyteArray buffer, float left,
330- float top, SkPaint* paint) {
329+ OpenGLRenderer* renderer, SkBitmap* bitmap, jbyteArray buffer,
330+ jfloat left, jfloat top, SkPaint* paint) {
331331 // This object allows the renderer to allocate a global JNI ref to the buffer object.
332332 JavaHeapBitmapRef bitmapRef (env, bitmap, buffer);
333333
@@ -354,6 +354,24 @@ static void android_view_GLES20Canvas_drawBitmapMatrix(JNIEnv* env, jobject claz
354354 renderer->drawBitmap (bitmap, matrix, paint);
355355}
356356
357+ static void android_view_GLES20Canvas_drawBitmapData (JNIEnv* env, jobject clazz,
358+ OpenGLRenderer* renderer, jintArray colors, jint offset, jint stride,
359+ jfloat left, jfloat top, jint width, jint height, jboolean hasAlpha, SkPaint* paint) {
360+ SkBitmap bitmap;
361+ SkBitmap::Config config = hasAlpha ? SkBitmap::kARGB_8888_Config : SkBitmap::kRGB_565_Config ;
362+ bitmap.setConfig (config, width, height);
363+
364+ if (!bitmap.allocPixels ()) {
365+ return ;
366+ }
367+
368+ if (!GraphicsJNI::SetPixels (env, colors, offset, stride, 0 , 0 , width, height, bitmap)) {
369+ return ;
370+ }
371+
372+ renderer->drawBitmapData (&bitmap, left, top, paint);
373+ }
374+
357375static void android_view_GLES20Canvas_drawBitmapMesh (JNIEnv* env, jobject clazz,
358376 OpenGLRenderer* renderer, SkBitmap* bitmap, jbyteArray buffer,
359377 jint meshWidth, jint meshHeight, jfloatArray vertices, jint offset,
@@ -880,6 +898,7 @@ static JNINativeMethod gMethods[] = {
880898 { " nDrawBitmap" , " (II[BFFI)V" , (void *) android_view_GLES20Canvas_drawBitmap },
881899 { " nDrawBitmap" , " (II[BFFFFFFFFI)V" ,(void *) android_view_GLES20Canvas_drawBitmapRect },
882900 { " nDrawBitmap" , " (II[BII)V" , (void *) android_view_GLES20Canvas_drawBitmapMatrix },
901+ { " nDrawBitmap" , " (I[IIIFFIIZI)V" , (void *) android_view_GLES20Canvas_drawBitmapData },
883902
884903 { " nDrawBitmapMesh" , " (II[BII[FI[III)V" ,(void *) android_view_GLES20Canvas_drawBitmapMesh },
885904
0 commit comments