diff options
author | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2020-05-14 01:33:36 +0300 |
---|---|---|
committer | Thiago Marcos P. Santos <thiago@mapbox.com> | 2020-05-26 20:35:05 +0300 |
commit | 4345bf23fbeee2b450e93a72c910233d31c8edbe (patch) | |
tree | 8cbc0bbf44782e0e31e91cdf8f411fe06de9efa0 | |
parent | 9760515d83619e011e65752743359d8917360315 (diff) | |
download | qtlocation-mapboxgl-4345bf23fbeee2b450e93a72c910233d31c8edbe.tar.gz |
Add method for getting AlphaImage from Android bitmap
-rw-r--r-- | platform/android/src/bitmap.cpp | 16 | ||||
-rw-r--r-- | platform/android/src/bitmap.hpp | 1 |
2 files changed, 17 insertions, 0 deletions
diff --git a/platform/android/src/bitmap.cpp b/platform/android/src/bitmap.cpp index eb7c676b12..59509e19f8 100644 --- a/platform/android/src/bitmap.cpp +++ b/platform/android/src/bitmap.cpp @@ -120,5 +120,21 @@ jni::Local<jni::Object<Bitmap>> Bitmap::Copy(jni::JNIEnv& env, const jni::Object return bitmap.Call(env, copy, Bitmap::Config::Create(env, Bitmap::Config::Value::ARGB_8888), jni::jni_false); } +AlphaImage Bitmap::GetAlphaImage(jni::JNIEnv& env, const jni::Object<Bitmap>& bitmap) { + AndroidBitmapInfo info; + const int result = AndroidBitmap_getInfo(&env, jni::Unwrap(*bitmap), &info); + if (result != ANDROID_BITMAP_RESULT_SUCCESS) { + throw std::runtime_error("bitmap decoding: couldn't get bitmap info"); + } + + if (info.format != ANDROID_BITMAP_FORMAT_A_8) { + Log::Error(Event::JNI, "bitmap decoding: GetAlphaImage must be invoked for single channel bitmaps"); + return AlphaImage(Size{info.width, info.height}); + } + + PixelGuard guard(env, bitmap); + return AlphaImage(Size{info.width, info.height}, guard.get(), info.stride * info.height); +} + } // namespace android } // namespace mbgl diff --git a/platform/android/src/bitmap.hpp b/platform/android/src/bitmap.hpp index 9d96405c26..3246a7facf 100644 --- a/platform/android/src/bitmap.hpp +++ b/platform/android/src/bitmap.hpp @@ -35,6 +35,7 @@ public: } static PremultipliedImage GetImage(jni::JNIEnv&, const jni::Object<Bitmap>&); + static AlphaImage GetAlphaImage(jni::JNIEnv&, const jni::Object<Bitmap>&); static jni::Local<jni::Object<Bitmap>> CreateBitmap(jni::JNIEnv&, const PremultipliedImage&); static jni::Local<jni::Object<Bitmap>> Copy(jni::JNIEnv&, const jni::Object<Bitmap>&); }; |