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/android/jni_string.h" | 9 #include "base/android/jni_string.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 34 JavaBitmap::~JavaBitmap() { | 34 JavaBitmap::~JavaBitmap() { |
| 35 int err = AndroidBitmap_unlockPixels(AttachCurrentThread(), bitmap_); | 35 int err = AndroidBitmap_unlockPixels(AttachCurrentThread(), bitmap_); |
| 36 DCHECK(!err); | 36 DCHECK(!err); |
| 37 } | 37 } |
| 38 | 38 |
| 39 // static | 39 // static |
| 40 bool JavaBitmap::RegisterJavaBitmap(JNIEnv* env) { | 40 bool JavaBitmap::RegisterJavaBitmap(JNIEnv* env) { |
| 41 return RegisterNativesImpl(env); | 41 return RegisterNativesImpl(env); |
| 42 } | 42 } |
| 43 | 43 |
| 44 static int SkBitmapConfigToBitmapFormat(SkBitmap::Config bitmap_config) { | 44 static int SkColorTypeToBitmapFormat(SkColorType color_type) { |
| 45 switch (bitmap_config) { | 45 switch (color_type) { |
| 46 case SkBitmap::kA8_Config: | 46 case kAlpha_8_SkColorType: |
| 47 return BITMAP_FORMAT_ALPHA_8; | 47 return BITMAP_FORMAT_ALPHA_8; |
| 48 case SkBitmap::kARGB_4444_Config: | 48 case kARGB_4444_SkColorType: |
| 49 return BITMAP_FORMAT_ARGB_4444; | 49 return BITMAP_FORMAT_ARGB_4444; |
| 50 case SkBitmap::kARGB_8888_Config: | 50 case kN32_SkColorType: |
|
msw
2014/07/08 16:52:07
nit q: this kN32_SkColorType could be kBGRA_8888_S
reed1
2014/07/08 17:02:37
kN32_SkColorType is an exact match for the legacy
| |
| 51 return BITMAP_FORMAT_ARGB_8888; | 51 return BITMAP_FORMAT_ARGB_8888; |
| 52 case SkBitmap::kRGB_565_Config: | 52 case kRGB_565_SkColorType: |
| 53 return BITMAP_FORMAT_RGB_565; | 53 return BITMAP_FORMAT_RGB_565; |
| 54 case SkBitmap::kNo_Config: | 54 case kUnknown_SkColorType: |
| 55 default: | 55 default: |
| 56 NOTREACHED(); | 56 NOTREACHED(); |
| 57 return BITMAP_FORMAT_NO_CONFIG; | 57 return BITMAP_FORMAT_NO_CONFIG; |
| 58 } | 58 } |
| 59 } | 59 } |
| 60 | 60 |
| 61 ScopedJavaLocalRef<jobject> CreateJavaBitmap(int width, | 61 ScopedJavaLocalRef<jobject> CreateJavaBitmap(int width, |
| 62 int height, | 62 int height, |
| 63 SkBitmap::Config bitmap_config) { | 63 SkColorType color_type) { |
| 64 DCHECK_GT(width, 0); | 64 DCHECK_GT(width, 0); |
| 65 DCHECK_GT(height, 0); | 65 DCHECK_GT(height, 0); |
| 66 int java_bitmap_config = SkBitmapConfigToBitmapFormat(bitmap_config); | 66 int java_bitmap_config = SkColorTypeToBitmapFormat(color_type); |
| 67 return Java_BitmapHelper_createBitmap( | 67 return Java_BitmapHelper_createBitmap( |
| 68 AttachCurrentThread(), width, height, java_bitmap_config); | 68 AttachCurrentThread(), width, height, java_bitmap_config); |
| 69 } | 69 } |
| 70 | 70 |
| 71 ScopedJavaLocalRef<jobject> CreateJavaBitmapFromAndroidResource( | 71 ScopedJavaLocalRef<jobject> CreateJavaBitmapFromAndroidResource( |
| 72 const char* name, | 72 const char* name, |
| 73 gfx::Size size) { | 73 gfx::Size size) { |
| 74 DCHECK(name); | 74 DCHECK(name); |
| 75 DCHECK(!size.IsEmpty()); | 75 DCHECK(!size.IsEmpty()); |
| 76 JNIEnv* env = AttachCurrentThread(); | 76 JNIEnv* env = AttachCurrentThread(); |
| 77 ScopedJavaLocalRef<jstring> jname(ConvertUTF8ToJavaString(env, name)); | 77 ScopedJavaLocalRef<jstring> jname(ConvertUTF8ToJavaString(env, name)); |
| 78 return Java_BitmapHelper_decodeDrawableResource( | 78 return Java_BitmapHelper_decodeDrawableResource( |
| 79 env, jname.obj(), size.width(), size.height()); | 79 env, jname.obj(), size.width(), size.height()); |
| 80 } | 80 } |
| 81 | 81 |
| 82 ScopedJavaLocalRef<jobject> ConvertToJavaBitmap(const SkBitmap* skbitmap) { | 82 ScopedJavaLocalRef<jobject> ConvertToJavaBitmap(const SkBitmap* skbitmap) { |
| 83 DCHECK(skbitmap); | 83 DCHECK(skbitmap); |
| 84 DCHECK(!skbitmap->isNull()); | 84 DCHECK(!skbitmap->isNull()); |
| 85 SkBitmap::Config bitmap_config = skbitmap->config(); | 85 SkColorType color_type = skbitmap->colorType(); |
| 86 DCHECK((bitmap_config == SkBitmap::kRGB_565_Config) || | 86 DCHECK((color_type == kRGB_565_SkColorType) || |
| 87 (bitmap_config == SkBitmap::kARGB_8888_Config)); | 87 (color_type == kN32_SkColorType)); |
| 88 ScopedJavaLocalRef<jobject> jbitmap = CreateJavaBitmap( | 88 ScopedJavaLocalRef<jobject> jbitmap = CreateJavaBitmap( |
| 89 skbitmap->width(), skbitmap->height(), bitmap_config); | 89 skbitmap->width(), skbitmap->height(), color_type); |
| 90 SkAutoLockPixels src_lock(*skbitmap); | 90 SkAutoLockPixels src_lock(*skbitmap); |
| 91 JavaBitmap dst_lock(jbitmap.obj()); | 91 JavaBitmap dst_lock(jbitmap.obj()); |
| 92 void* src_pixels = skbitmap->getPixels(); | 92 void* src_pixels = skbitmap->getPixels(); |
| 93 void* dst_pixels = dst_lock.pixels(); | 93 void* dst_pixels = dst_lock.pixels(); |
| 94 memcpy(dst_pixels, src_pixels, skbitmap->getSize()); | 94 memcpy(dst_pixels, src_pixels, skbitmap->getSize()); |
| 95 | 95 |
| 96 return jbitmap; | 96 return jbitmap; |
| 97 } | 97 } |
| 98 | 98 |
| 99 SkBitmap CreateSkBitmapFromJavaBitmap(const JavaBitmap& jbitmap) { | 99 SkBitmap CreateSkBitmapFromJavaBitmap(const JavaBitmap& jbitmap) { |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 113 LOG(FATAL) << " Failed to allocate bitmap of size " << src_size.width() | 113 LOG(FATAL) << " Failed to allocate bitmap of size " << src_size.width() |
| 114 << "x" << src_size.height() << " stride=" << jbitmap.stride(); | 114 << "x" << src_size.height() << " stride=" << jbitmap.stride(); |
| 115 } | 115 } |
| 116 const void* src_pixels = jbitmap.pixels(); | 116 const void* src_pixels = jbitmap.pixels(); |
| 117 void* dst_pixels = skbitmap.getPixels(); | 117 void* dst_pixels = skbitmap.getPixels(); |
| 118 memcpy(dst_pixels, src_pixels, skbitmap.getSize()); | 118 memcpy(dst_pixels, src_pixels, skbitmap.getSize()); |
| 119 | 119 |
| 120 return skbitmap; | 120 return skbitmap; |
| 121 } | 121 } |
| 122 | 122 |
| 123 SkBitmap::Config ConvertToSkiaConfig(jobject bitmap_config) { | 123 SkColorType ConvertToSkiaColorType(jobject bitmap_config) { |
| 124 int jbitmap_config = Java_BitmapHelper_getBitmapFormatForConfig( | 124 int jbitmap_config = Java_BitmapHelper_getBitmapFormatForConfig( |
| 125 AttachCurrentThread(), bitmap_config); | 125 AttachCurrentThread(), bitmap_config); |
| 126 switch (jbitmap_config) { | 126 switch (jbitmap_config) { |
| 127 case BITMAP_FORMAT_ALPHA_8: | 127 case BITMAP_FORMAT_ALPHA_8: |
| 128 return SkBitmap::kA8_Config; | 128 return kAlpha_8_SkColorType; |
| 129 case BITMAP_FORMAT_ARGB_4444: | 129 case BITMAP_FORMAT_ARGB_4444: |
| 130 return SkBitmap::kARGB_4444_Config; | 130 return kARGB_4444_SkColorType; |
| 131 case BITMAP_FORMAT_ARGB_8888: | 131 case BITMAP_FORMAT_ARGB_8888: |
| 132 return SkBitmap::kARGB_8888_Config; | 132 return kN32_SkColorType; |
| 133 case BITMAP_FORMAT_RGB_565: | 133 case BITMAP_FORMAT_RGB_565: |
| 134 return SkBitmap::kRGB_565_Config; | 134 return kRGB_565_SkColorType; |
| 135 case BITMAP_FORMAT_NO_CONFIG: | 135 case BITMAP_FORMAT_NO_CONFIG: |
| 136 default: | 136 default: |
| 137 return SkBitmap::kNo_Config; | 137 return kUnknown_SkColorType; |
| 138 } | 138 } |
| 139 } | 139 } |
| 140 | 140 |
| 141 } // namespace gfx | 141 } // namespace gfx |
| OLD | NEW |