#include #include #include "image.hpp" namespace mbgl { namespace android { mbgl::style::Image Image::getImage(jni::JNIEnv& env, jni::Object image) { static auto widthField = Image::javaClass.GetField(env, "width"); static auto heightField = Image::javaClass.GetField(env, "height"); static auto pixelRatioField = Image::javaClass.GetField(env, "pixelRatio"); static auto bufferField = Image::javaClass.GetField>(env, "buffer"); static auto nameField = Image::javaClass.GetField(env, "name"); auto height = image.Get(env, heightField); auto width = image.Get(env, widthField); auto pixelRatio = image.Get(env, pixelRatioField); auto pixels = image.Get(env, bufferField); auto jName = image.Get(env, nameField); auto name = jni::Make(env, jName); jni::DeleteLocalRef(env, jName); jni::NullCheck(env, &pixels); std::size_t size = pixels.Length(env); mbgl::PremultipliedImage premultipliedImage({ static_cast(width), static_cast(height) }); if (premultipliedImage.bytes() != uint32_t(size)) { throw mbgl::util::SpriteImageException("Sprite image pixel count mismatch"); } jni::GetArrayRegion(env, *pixels, 0, size, reinterpret_cast(premultipliedImage.data.get())); return mbgl::style::Image {name, std::move(premultipliedImage), pixelRatio}; } void Image::registerNative(jni::JNIEnv &env) { // Lookup the class Image::javaClass = *jni::Class::Find(env).NewGlobalRef(env).release(); } jni::Class Image::javaClass; } // namespace android } // namespace mb