bool GraphicsJNI::SetPixels(JNIEnv* env, jintArray srcColors, int srcOffset, int srcStride, int x, int y, int width, int height, const SkBitmap& dstBitmap) { SkAutoLockPixels alp(dstBitmap); void* dst = dstBitmap.getPixels(); FromColorProc proc = ChooseFromColorProc(dstBitmap.config()); if (NULL == dst || NULL == proc) { return false; } const jint* array = env->GetIntArrayElements(srcColors, NULL); const SkColor* src = (const SkColor*)array + srcOffset; // reset to to actual choice from caller dst = dstBitmap.getAddr(x, y); // now copy/convert each scanline for (int y = 0; y < height; y++) { proc(dst, src, width, x, y); src += srcStride; dst = (char*)dst + dstBitmap.rowBytes(); } dstBitmap.notifyPixelsChanged(); env->ReleaseIntArrayElements(srcColors, const_cast<jint*>(array), JNI_ABORT); return true; }
static void Bitmap_setPixel(JNIEnv* env, jobject, const SkBitmap* bitmap, int x, int y, SkColor color) { SkAutoLockPixels alp(*bitmap); if (NULL == bitmap->getPixels()) { return; } FromColorProc proc = ChooseFromColorProc(bitmap->config()); if (NULL == proc) { return; } proc(bitmap->getAddr(x, y), &color, 1, x, y); bitmap->notifyPixelsChanged(); }
static void Bitmap_setPixel(JNIEnv* env, jobject, jlong bitmapHandle, jint x, jint y, jint colorHandle) { const SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle); SkColor color = static_cast<SkColor>(colorHandle); SkAutoLockPixels alp(*bitmap); if (NULL == bitmap->getPixels()) { return; } FromColorProc proc = ChooseFromColorProc(*bitmap); if (NULL == proc) { return; } proc(bitmap->getAddr(x, y), &color, 1, x, y); bitmap->notifyPixelsChanged(); }