Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/gfx/android/java_bitmap.h" | 5 #include "ui/gfx/android/java_bitmap.h" |
| 6 | 6 |
| 7 #include <android/bitmap.h> | 7 #include <android/bitmap.h> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "jni/BitmapHelper_jni.h" | 10 #include "jni/BitmapHelper_jni.h" |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 64 static ScopedJavaLocalRef<jobject> CreateJavaBitmapFromResource( | 64 static ScopedJavaLocalRef<jobject> CreateJavaBitmapFromResource( |
| 65 const char* name, gfx::Size requested_size) { | 65 const char* name, gfx::Size requested_size) { |
| 66 JNIEnv* env = AttachCurrentThread(); | 66 JNIEnv* env = AttachCurrentThread(); |
| 67 ScopedJavaLocalRef<jstring> jname(env, env->NewStringUTF(name)); | 67 ScopedJavaLocalRef<jstring> jname(env, env->NewStringUTF(name)); |
| 68 return ui::Java_BitmapHelper_decodeDrawableResource(env, | 68 return ui::Java_BitmapHelper_decodeDrawableResource(env, |
| 69 jname.obj(), | 69 jname.obj(), |
| 70 requested_size.width(), | 70 requested_size.width(), |
| 71 requested_size.height()); | 71 requested_size.height()); |
| 72 } | 72 } |
| 73 | 73 |
| 74 static SkBitmap ConvertToSkBitmap(ScopedJavaLocalRef<jobject> jbitmap) { | 74 SkBitmap CreateSkBitmapFromJavaBitmap(JavaBitmap& jbitmap) { |
| 75 if (jbitmap.is_null()) | 75 DCHECK_EQ(jbitmap.format(), ANDROID_BITMAP_FORMAT_RGBA_8888); |
| 76 return SkBitmap(); | |
| 77 | 76 |
| 78 JavaBitmap src_lock(jbitmap.obj()); | 77 gfx::Size src_size = jbitmap.size(); |
| 79 DCHECK_EQ(src_lock.format(), ANDROID_BITMAP_FORMAT_RGBA_8888); | |
| 80 | |
| 81 gfx::Size src_size = src_lock.size(); | |
| 82 | 78 |
| 83 SkBitmap skbitmap; | 79 SkBitmap skbitmap; |
| 84 skbitmap.setConfig(SkBitmap::kARGB_8888_Config, | 80 skbitmap.setConfig(SkBitmap::kARGB_8888_Config, |
| 85 src_size.width(), src_size.height(), src_lock.stride()); | 81 src_size.width(), |
| 82 src_size.height(), | |
| 83 jbitmap.stride()); | |
| 86 skbitmap.allocPixels(); | 84 skbitmap.allocPixels(); |
| 87 SkAutoLockPixels dst_lock(skbitmap); | 85 SkAutoLockPixels dst_lock(skbitmap); |
| 88 | 86 |
| 89 void* src_pixels = src_lock.pixels(); | 87 void* src_pixels = jbitmap.pixels(); |
| 90 void* dst_pixels = skbitmap.getPixels(); | 88 void* dst_pixels = skbitmap.getPixels(); |
| 91 | 89 |
| 92 memcpy(dst_pixels, src_pixels, skbitmap.getSize()); | 90 memcpy(dst_pixels, src_pixels, skbitmap.getSize()); |
| 93 | 91 |
| 94 return skbitmap; | 92 return skbitmap; |
| 95 } | 93 } |
| 96 | 94 |
| 95 static SkBitmap ConvertToSkBitmap(ScopedJavaLocalRef<jobject> jbitmap) { | |
|
aelias_OOO_until_Jul13
2013/09/06 04:17:38
Could you get rid of this method by making CreateJ
powei
2013/09/09 17:57:18
Done. Consolidated into fewer functions.
| |
| 96 if (jbitmap.is_null()) | |
| 97 return SkBitmap(); | |
| 98 | |
| 99 JavaBitmap src_lock(jbitmap.obj()); | |
| 100 return CreateSkBitmapFromJavaBitmap(src_lock); | |
| 101 } | |
| 102 | |
| 97 SkBitmap CreateSkBitmapFromResource(const char* name, gfx::Size size) { | 103 SkBitmap CreateSkBitmapFromResource(const char* name, gfx::Size size) { |
| 98 DCHECK(!size.IsEmpty()); | 104 DCHECK(!size.IsEmpty()); |
| 99 SkBitmap bitmap = | 105 SkBitmap bitmap = |
| 100 ConvertToSkBitmap(CreateJavaBitmapFromResource(name, size)); | 106 ConvertToSkBitmap(CreateJavaBitmapFromResource(name, size)); |
| 101 if (bitmap.isNull()) | 107 if (bitmap.isNull()) |
| 102 return bitmap; | 108 return bitmap; |
| 103 // RESIZE_BOX has sufficient downsampling quality with minimal runtime cost. | 109 // RESIZE_BOX has sufficient downsampling quality with minimal runtime cost. |
| 104 return skia::ImageOperations::Resize(bitmap, | 110 return skia::ImageOperations::Resize(bitmap, |
| 105 skia::ImageOperations::RESIZE_BOX, | 111 skia::ImageOperations::RESIZE_BOX, |
| 106 size.width(), size.height()); | 112 size.width(), size.height()); |
| 107 } | 113 } |
| 108 | 114 |
| 109 } // namespace gfx | 115 } // namespace gfx |
| OLD | NEW |