Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(539)

Side by Side Diff: ui/gfx/android/java_bitmap.cc

Issue 2417263002: Pass JavaRef to Java methods in ui. (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698