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 |