summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Shalamov <alexander.shalamov@mapbox.com>2020-05-14 01:33:36 +0300
committerThiago Marcos P. Santos <thiago@mapbox.com>2020-05-26 20:35:05 +0300
commit4345bf23fbeee2b450e93a72c910233d31c8edbe (patch)
tree8cbc0bbf44782e0e31e91cdf8f411fe06de9efa0
parent9760515d83619e011e65752743359d8917360315 (diff)
downloadqtlocation-mapboxgl-4345bf23fbeee2b450e93a72c910233d31c8edbe.tar.gz
Add method for getting AlphaImage from Android bitmap
-rw-r--r--platform/android/src/bitmap.cpp16
-rw-r--r--platform/android/src/bitmap.hpp1
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>&);
};