| 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" |
| 11 #include "jni/BitmapHelper_jni.h" | 11 #include "jni/BitmapHelper_jni.h" |
| 12 #include "ui/gfx/geometry/size.h" | 12 #include "ui/gfx/geometry/size.h" |
| 13 | 13 |
| 14 using base::android::AttachCurrentThread; | 14 using base::android::AttachCurrentThread; |
| 15 using base::android::ConvertUTF8ToJavaString; | 15 using base::android::ConvertUTF8ToJavaString; |
| 16 using base::android::ScopedJavaLocalRef; | 16 using base::android::ScopedJavaLocalRef; |
| 17 using base::android::JavaRef; |
| 17 | 18 |
| 18 namespace gfx { | 19 namespace gfx { |
| 19 | 20 |
| 20 JavaBitmap::JavaBitmap(jobject bitmap) | 21 JavaBitmap::JavaBitmap(const JavaRef<jobject>& bitmap) |
| 21 : bitmap_(bitmap), | 22 : bitmap_(bitmap), pixels_(NULL) { |
| 22 pixels_(NULL) { | 23 int err = |
| 23 int err = AndroidBitmap_lockPixels(AttachCurrentThread(), bitmap_, &pixels_); | 24 AndroidBitmap_lockPixels(AttachCurrentThread(), bitmap_.obj(), &pixels_); |
| 24 DCHECK(!err); | 25 DCHECK(!err); |
| 25 DCHECK(pixels_); | 26 DCHECK(pixels_); |
| 26 | 27 |
| 27 AndroidBitmapInfo info; | 28 AndroidBitmapInfo info; |
| 28 err = AndroidBitmap_getInfo(AttachCurrentThread(), bitmap_, &info); | 29 err = AndroidBitmap_getInfo(AttachCurrentThread(), bitmap_.obj(), &info); |
| 29 DCHECK(!err); | 30 DCHECK(!err); |
| 30 size_ = gfx::Size(info.width, info.height); | 31 size_ = gfx::Size(info.width, info.height); |
| 31 format_ = info.format; | 32 format_ = info.format; |
| 32 stride_ = info.stride; | 33 stride_ = info.stride; |
| 33 byte_count_ = Java_BitmapHelper_getByteCount(AttachCurrentThread(), bitmap_); | 34 byte_count_ = Java_BitmapHelper_getByteCount(AttachCurrentThread(), bitmap_); |
| 34 } | 35 } |
| 35 | 36 |
| 36 JavaBitmap::~JavaBitmap() { | 37 JavaBitmap::~JavaBitmap() { |
| 37 int err = AndroidBitmap_unlockPixels(AttachCurrentThread(), bitmap_); | 38 int err = AndroidBitmap_unlockPixels(AttachCurrentThread(), bitmap_.obj()); |
| 38 DCHECK(!err); | 39 DCHECK(!err); |
| 39 } | 40 } |
| 40 | 41 |
| 41 static int SkColorTypeToBitmapFormat(SkColorType color_type) { | 42 static int SkColorTypeToBitmapFormat(SkColorType color_type) { |
| 42 switch (color_type) { | 43 switch (color_type) { |
| 43 case kAlpha_8_SkColorType: | 44 case kAlpha_8_SkColorType: |
| 44 return BITMAP_FORMAT_ALPHA_8; | 45 return BITMAP_FORMAT_ALPHA_8; |
| 45 case kARGB_4444_SkColorType: | 46 case kARGB_4444_SkColorType: |
| 46 return BITMAP_FORMAT_ARGB_4444; | 47 return BITMAP_FORMAT_ARGB_4444; |
| 47 case kN32_SkColorType: | 48 case kN32_SkColorType: |
| (...skipping 19 matching lines...) Expand all Loading... |
| 67 | 68 |
| 68 ScopedJavaLocalRef<jobject> ConvertToJavaBitmap(const SkBitmap* skbitmap) { | 69 ScopedJavaLocalRef<jobject> ConvertToJavaBitmap(const SkBitmap* skbitmap) { |
| 69 DCHECK(skbitmap); | 70 DCHECK(skbitmap); |
| 70 DCHECK(!skbitmap->isNull()); | 71 DCHECK(!skbitmap->isNull()); |
| 71 SkColorType color_type = skbitmap->colorType(); | 72 SkColorType color_type = skbitmap->colorType(); |
| 72 DCHECK((color_type == kRGB_565_SkColorType) || | 73 DCHECK((color_type == kRGB_565_SkColorType) || |
| 73 (color_type == kN32_SkColorType)); | 74 (color_type == kN32_SkColorType)); |
| 74 ScopedJavaLocalRef<jobject> jbitmap = CreateJavaBitmap( | 75 ScopedJavaLocalRef<jobject> jbitmap = CreateJavaBitmap( |
| 75 skbitmap->width(), skbitmap->height(), color_type); | 76 skbitmap->width(), skbitmap->height(), color_type); |
| 76 SkAutoLockPixels src_lock(*skbitmap); | 77 SkAutoLockPixels src_lock(*skbitmap); |
| 77 JavaBitmap dst_lock(jbitmap.obj()); | 78 JavaBitmap dst_lock(jbitmap); |
| 78 void* src_pixels = skbitmap->getPixels(); | 79 void* src_pixels = skbitmap->getPixels(); |
| 79 void* dst_pixels = dst_lock.pixels(); | 80 void* dst_pixels = dst_lock.pixels(); |
| 80 memcpy(dst_pixels, src_pixels, skbitmap->getSize()); | 81 memcpy(dst_pixels, src_pixels, skbitmap->getSize()); |
| 81 | 82 |
| 82 return jbitmap; | 83 return jbitmap; |
| 83 } | 84 } |
| 84 | 85 |
| 85 SkBitmap CreateSkBitmapFromJavaBitmap(const JavaBitmap& jbitmap) { | 86 SkBitmap CreateSkBitmapFromJavaBitmap(const JavaBitmap& jbitmap) { |
| 86 DCHECK(!jbitmap.size().IsEmpty()); | 87 DCHECK(!jbitmap.size().IsEmpty()); |
| 87 DCHECK_GT(jbitmap.stride(), 0U); | 88 DCHECK_GT(jbitmap.stride(), 0U); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 106 break; | 107 break; |
| 107 } | 108 } |
| 108 CHECK_EQ(jbitmap.byte_count(), static_cast<int>(skbitmap.getSize())); | 109 CHECK_EQ(jbitmap.byte_count(), static_cast<int>(skbitmap.getSize())); |
| 109 const void* src_pixels = jbitmap.pixels(); | 110 const void* src_pixels = jbitmap.pixels(); |
| 110 void* dst_pixels = skbitmap.getPixels(); | 111 void* dst_pixels = skbitmap.getPixels(); |
| 111 memcpy(dst_pixels, src_pixels, skbitmap.getSize()); | 112 memcpy(dst_pixels, src_pixels, skbitmap.getSize()); |
| 112 | 113 |
| 113 return skbitmap; | 114 return skbitmap; |
| 114 } | 115 } |
| 115 | 116 |
| 116 SkColorType ConvertToSkiaColorType(jobject bitmap_config) { | 117 SkColorType ConvertToSkiaColorType(const JavaRef<jobject>& bitmap_config) { |
| 117 int jbitmap_config = Java_BitmapHelper_getBitmapFormatForConfig( | 118 int jbitmap_config = Java_BitmapHelper_getBitmapFormatForConfig( |
| 118 AttachCurrentThread(), bitmap_config); | 119 AttachCurrentThread(), bitmap_config); |
| 119 switch (jbitmap_config) { | 120 switch (jbitmap_config) { |
| 120 case BITMAP_FORMAT_ALPHA_8: | 121 case BITMAP_FORMAT_ALPHA_8: |
| 121 return kAlpha_8_SkColorType; | 122 return kAlpha_8_SkColorType; |
| 122 case BITMAP_FORMAT_ARGB_4444: | 123 case BITMAP_FORMAT_ARGB_4444: |
| 123 return kARGB_4444_SkColorType; | 124 return kARGB_4444_SkColorType; |
| 124 case BITMAP_FORMAT_ARGB_8888: | 125 case BITMAP_FORMAT_ARGB_8888: |
| 125 return kN32_SkColorType; | 126 return kN32_SkColorType; |
| 126 case BITMAP_FORMAT_RGB_565: | 127 case BITMAP_FORMAT_RGB_565: |
| 127 return kRGB_565_SkColorType; | 128 return kRGB_565_SkColorType; |
| 128 case BITMAP_FORMAT_NO_CONFIG: | 129 case BITMAP_FORMAT_NO_CONFIG: |
| 129 default: | 130 default: |
| 130 return kUnknown_SkColorType; | 131 return kUnknown_SkColorType; |
| 131 } | 132 } |
| 132 } | 133 } |
| 133 | 134 |
| 134 } // namespace gfx | 135 } // namespace gfx |
| OLD | NEW |