#include #include #include "image.hpp" namespace mbgl { namespace android { mbgl::style::Image Image::getImage(jni::JNIEnv& env, const jni::Object& image) { static auto& javaClass = jni::Class::Singleton(env); static auto widthField = javaClass.GetField(env, "width"); static auto heightField = javaClass.GetField(env, "height"); static auto pixelRatioField = javaClass.GetField(env, "pixelRatio"); static auto bufferField = javaClass.GetField>(env, "buffer"); static auto nameField = javaClass.GetField(env, "name"); static auto sdfField = javaClass.GetField(env, "sdf"); 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 name = jni::Make(env, image.Get(env, nameField)); auto sdf = (bool) image.Get(env, sdfField); jni::NullCheck(env, pixels.get()); 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, sdf}; } void Image::registerNative(jni::JNIEnv &env) { jni::Class::Singleton(env); } } // namespace android } // namespace mb