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

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

Issue 10823094: Add bitmap utils for Chrome on Android (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Address review comments Created 8 years, 4 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
« no previous file with comments | « ui/gfx/android/java_bitmap.h ('k') | ui/ui.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "ui/gfx/android/java_bitmap.h"
6
7 #include <android/bitmap.h>
8
9 #include "base/android/jni_android.h"
10 #include "base/logging.h"
11 #include "third_party/skia/include/core/SkBitmap.h"
12 #include "ui/gfx/size.h"
13
14 using base::android::AttachCurrentThread;
15 using base::android::GetClass;
16 using base::android::GetMethodID;
17 using base::android::GetStaticFieldID;
18 using base::android::GetStaticMethodID;
19 using base::android::ScopedJavaLocalRef;
20
21 namespace {
22 static jclass g_AndroidBitmap_clazz = NULL;
23 static jmethodID g_AndroidBitmap_createBitmap_method = NULL;
24 static jobject g_BitmapConfig_ARGB8888 = NULL;
25 } // anonymous namespace
26
27 namespace gfx {
28
29 JavaBitmap::JavaBitmap(jobject bitmap)
30 : bitmap_(bitmap),
31 pixels_(NULL) {
32 int err = AndroidBitmap_lockPixels(AttachCurrentThread(), bitmap_, &pixels_);
33 DCHECK(!err);
34 DCHECK(pixels_);
35 }
36
37 JavaBitmap::~JavaBitmap() {
38 int err = AndroidBitmap_unlockPixels(AttachCurrentThread(), bitmap_);
39 DCHECK(!err);
40 }
41
42 gfx::Size JavaBitmap::Size() const {
43 AndroidBitmapInfo info;
44 int err = AndroidBitmap_getInfo(AttachCurrentThread(), bitmap_, &info);
45 DCHECK(!err);
46 return gfx::Size(info.width, info.height);
47 }
48
49 int JavaBitmap::Format() const {
50 AndroidBitmapInfo info;
51 int err = AndroidBitmap_getInfo(AttachCurrentThread(), bitmap_, &info);
52 DCHECK(!err);
53 return info.format;
54 }
55
56 uint32_t JavaBitmap::Stride() const {
57 AndroidBitmapInfo info;
58 int err = AndroidBitmap_getInfo(AttachCurrentThread(), bitmap_, &info);
59 DCHECK(!err);
60 return info.stride;
61 }
62
63 void RegisterBitmapAndroid(JNIEnv* env) {
64 g_AndroidBitmap_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
65 base::android::GetUnscopedClass(env, "android/graphics/Bitmap")));
66 ScopedJavaLocalRef<jclass> bitmapConfig_clazz = base::android::GetClass(
67 env, "android/graphics/Bitmap$Config");
68 g_AndroidBitmap_createBitmap_method = GetStaticMethodID(env,
69 g_AndroidBitmap_clazz, "createBitmap",
70 "(IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;");
71 jfieldID argb_8888_id = GetStaticFieldID(env, bitmapConfig_clazz, "ARGB_8888",
72 "Landroid/graphics/Bitmap$Config;");
73 g_BitmapConfig_ARGB8888 = reinterpret_cast<jobject>(env->NewGlobalRef(
74 env->GetStaticObjectField(bitmapConfig_clazz.obj(), argb_8888_id)));
75 }
76
77 ScopedJavaLocalRef<jobject> CreateJavaBitmap(const gfx::Size& size) {
78 DCHECK(g_AndroidBitmap_clazz);
79 JNIEnv* env = AttachCurrentThread();
80 jobject bitmap_object = env->CallStaticObjectMethod(g_AndroidBitmap_clazz,
81 g_AndroidBitmap_createBitmap_method, size.width(), size.height(),
82 g_BitmapConfig_ARGB8888);
83 return ScopedJavaLocalRef<jobject>(env, bitmap_object);
84 }
85
86 ScopedJavaLocalRef<jobject> ConvertToJavaBitmap(const SkBitmap* skbitmap) {
87 DCHECK(skbitmap);
88 DCHECK_EQ(skbitmap->bytesPerPixel(), 4);
89
90 ScopedJavaLocalRef<jobject> jbitmap =
91 CreateJavaBitmap(gfx::Size(skbitmap->width(), skbitmap->height()));
92 SkAutoLockPixels src_lock(*skbitmap);
93 JavaBitmap dst_lock(jbitmap.obj());
94 void* src_pixels = skbitmap->getPixels();
95 void* dst_pixels = dst_lock.pixels();
96 memcpy(dst_pixels, src_pixels, skbitmap->getSize());
97
98 return jbitmap;
99 }
100
101 } // namespace gfx
OLDNEW
« no previous file with comments | « ui/gfx/android/java_bitmap.h ('k') | ui/ui.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698