diff options
-rw-r--r-- | core/jni/android/graphics/BitmapFactory.cpp | 5 | ||||
-rw-r--r-- | core/jni/android/graphics/BitmapFactory.h | 2 | ||||
-rw-r--r-- | core/jni/android_emoji_EmojiFactory.cpp | 10 |
3 files changed, 9 insertions, 8 deletions
diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/core/jni/android/graphics/BitmapFactory.cpp index 526885f..4c4a39d 100644 --- a/core/jni/android/graphics/BitmapFactory.cpp +++ b/core/jni/android/graphics/BitmapFactory.cpp @@ -543,6 +543,11 @@ static jboolean nativeIsSeekable(JNIEnv* env, jobject, jobject fileDescriptor) { return ::lseek64(descriptor, 0, SEEK_CUR) != -1 ? JNI_TRUE : JNI_FALSE; } +jobject decodeBitmap(JNIEnv* env, void* data, size_t size) { + SkMemoryStream stream(data, size); + return doDecode(env, &stream, NULL, NULL); +} + /////////////////////////////////////////////////////////////////////////////// static JNINativeMethod gMethods[] = { diff --git a/core/jni/android/graphics/BitmapFactory.h b/core/jni/android/graphics/BitmapFactory.h index a54da43..22a955f 100644 --- a/core/jni/android/graphics/BitmapFactory.h +++ b/core/jni/android/graphics/BitmapFactory.h @@ -21,4 +21,6 @@ extern jfieldID gOptions_bitmapFieldID; jstring getMimeTypeString(JNIEnv* env, SkImageDecoder::Format format); +jobject decodeBitmap(JNIEnv* env, void* data, size_t size); + #endif // _ANDROID_GRAPHICS_BITMAP_FACTORY_H_ diff --git a/core/jni/android_emoji_EmojiFactory.cpp b/core/jni/android_emoji_EmojiFactory.cpp index 655b400..e9f18a6 100644 --- a/core/jni/android_emoji_EmojiFactory.cpp +++ b/core/jni/android_emoji_EmojiFactory.cpp @@ -5,6 +5,7 @@ #include <utils/Log.h> #include <ScopedUtfChars.h> +#include "BitmapFactory.h" #include "EmojiFactory.h" #include "GraphicsJNI.h" #include <nativehelper/JNIHelp.h> @@ -164,14 +165,7 @@ static jobject android_emoji_EmojiFactory_getBitmapFromAndroidPua( return NULL; } - SkBitmap *bitmap = new SkBitmap; - if (!SkImageDecoder::DecodeMemory(bytes, size, bitmap)) { - ALOGE("SkImageDecoder::DecodeMemory() failed."); - return NULL; - } - - return GraphicsJNI::createBitmap(env, bitmap, - GraphicsJNI::kBitmapCreateFlag_Premultiplied, NULL); + return decodeBitmap(env, (void*)bytes, size); } static void android_emoji_EmojiFactory_destructor( |