| Index: ui/gfx/android/java_bitmap.cc
|
| diff --git a/ui/gfx/android/java_bitmap.cc b/ui/gfx/android/java_bitmap.cc
|
| index c3cd94d62131029885db0172e46ff3342fe79702..6c2eaa845a26e52e9d23defcaf9a4641864db2ef 100644
|
| --- a/ui/gfx/android/java_bitmap.cc
|
| +++ b/ui/gfx/android/java_bitmap.cc
|
| @@ -62,33 +62,20 @@ ScopedJavaLocalRef<jobject> ConvertToJavaBitmap(const SkBitmap* skbitmap) {
|
| return jbitmap;
|
| }
|
|
|
| -static ScopedJavaLocalRef<jobject> CreateJavaBitmapFromResource(
|
| - const char* name, gfx::Size requested_size) {
|
| - JNIEnv* env = AttachCurrentThread();
|
| - ScopedJavaLocalRef<jstring> jname(
|
| - base::android::ConvertUTF8ToJavaString(env, name));
|
| - return ui::Java_BitmapHelper_decodeDrawableResource(env,
|
| - jname.obj(),
|
| - requested_size.width(),
|
| - requested_size.height());
|
| -}
|
| -
|
| -static SkBitmap ConvertToSkBitmap(ScopedJavaLocalRef<jobject> jbitmap) {
|
| - if (jbitmap.is_null())
|
| - return SkBitmap();
|
| +SkBitmap CreateSkBitmapFromJavaBitmap(JavaBitmap& jbitmap) {
|
| + DCHECK_EQ(jbitmap.format(), ANDROID_BITMAP_FORMAT_RGBA_8888);
|
|
|
| - JavaBitmap src_lock(jbitmap.obj());
|
| - DCHECK_EQ(src_lock.format(), ANDROID_BITMAP_FORMAT_RGBA_8888);
|
| -
|
| - gfx::Size src_size = src_lock.size();
|
| + gfx::Size src_size = jbitmap.size();
|
|
|
| SkBitmap skbitmap;
|
| skbitmap.setConfig(SkBitmap::kARGB_8888_Config,
|
| - src_size.width(), src_size.height(), src_lock.stride());
|
| + src_size.width(),
|
| + src_size.height(),
|
| + jbitmap.stride());
|
| skbitmap.allocPixels();
|
| SkAutoLockPixels dst_lock(skbitmap);
|
|
|
| - void* src_pixels = src_lock.pixels();
|
| + void* src_pixels = jbitmap.pixels();
|
| void* dst_pixels = skbitmap.getPixels();
|
|
|
| memcpy(dst_pixels, src_pixels, skbitmap.getSize());
|
| @@ -98,14 +85,17 @@ static SkBitmap ConvertToSkBitmap(ScopedJavaLocalRef<jobject> jbitmap) {
|
|
|
| SkBitmap CreateSkBitmapFromResource(const char* name, gfx::Size size) {
|
| DCHECK(!size.IsEmpty());
|
| - SkBitmap bitmap =
|
| - ConvertToSkBitmap(CreateJavaBitmapFromResource(name, size));
|
| - if (bitmap.isNull())
|
| - return bitmap;
|
| - // RESIZE_BOX has sufficient downsampling quality with minimal runtime cost.
|
| - return skia::ImageOperations::Resize(bitmap,
|
| - skia::ImageOperations::RESIZE_BOX,
|
| - size.width(), size.height());
|
| + JNIEnv* env = AttachCurrentThread();
|
| + ScopedJavaLocalRef<jstring> jname(env, env->NewStringUTF(name));
|
| + ScopedJavaLocalRef<jobject> jobj(ui::Java_BitmapHelper_decodeDrawableResource(
|
| + env, jname.obj(), size.width(), size.height()));
|
| + if (jobj.is_null())
|
| + return SkBitmap();
|
| +
|
| + JavaBitmap jbitmap(jobj.obj());
|
| + SkBitmap bitmap = CreateSkBitmapFromJavaBitmap(jbitmap);
|
| + return skia::ImageOperations::Resize(
|
| + bitmap, skia::ImageOperations::RESIZE_BOX, size.width(), size.height());
|
| }
|
|
|
| } // namespace gfx
|
|
|