Сборка OpenJPEG для Android

У меня вопрос.

Что бы мне сделать, я использую OpenJPEG на Android? (Я "j2k_to_image" в первую очередь хочу использовать.)

Я хотел бы, чтобы вы сказали мне, как мне написать make-файл. Заранее спасибо.

1 ответ

Мне удалось создать + использовать OpenJPEG для загрузки изображений JPEG2000 в мое приложение, используя следующую схему. Вам придется настроить его в соответствии с вашей средой и тем, как вы хотите его использовать. Мой ответ содержит грубые рекомендации, а также конкретные ответы на основные камни преткновения, с которыми я столкнулся (какими должны быть мои файлы Android.mk и Application.mk, а также как справиться с тем фактом, что библиотека OpenJPEG требует cmake).

Поскольку мы говорим об OpenJPEG, в этом ответе предполагается, что вы знакомы и планируете использовать Android NDK для своего приложения. Также предполагается, что вы используете Eclipse-версию Android IDE. Ответ также предполагает, что вы знакомы с тем, как статические библиотеки работают с Android NDK, и как ссылаться на них в своем основном приложении. Вы можете расширить мой ответ ниже, чтобы создать общую библиотеку или включить код непосредственно в ваше приложение. Если вы не знакомы с этими предпосылками, stackru и Google могут помочь.

Я был успешным с Android NDK r8e и OpenJPEG 2.0.0.

шаги:

  1. Загрузите и разверните OpenJPEG 2.0.0 с http://www.openjpeg.org/index.php?menu=download
  2. Создайте собственный проект в Eclipse. Я создал проект, который позволяет мне использовать OpenJPEG в качестве статической библиотеки
  3. В папке jni моего проекта я использовал следующее для моего Application.mk и моих файлов Android.mk. Увидеть ниже.
  4. Создайте собственный файл opj_config.h. OpenJPEG предназначен для компиляции с помощью cmake. Я не хотел иметь дело с этим по ряду причин - ни один из моего другого контента не полагается на него (так что это добавило бы еще один уровень сложности), я нахожусь на Windows (которая не имеет встроенного, и этот стековый поток сообщений ссылается на android-cmake, документы для android-cmake указывают, что он может не работать в Windows). Смотрите ниже мой opj_config.h. Это должно работать для вас. Убедитесь, что вы поместили его где-то в пути включения.
  5. Сборка проекта статической библиотеки Android NDK
  6. Ссылка вашей статической библиотеки в ваш основной проект

Благодаря этому я смог успешно загрузить изображение JPEG2000 в свое приложение на базе Android NDK.

Application.mk:

APP_ABI := all
APP_PLATFORM := android-9
APP_MODULES := openjpeg

Android.mk (вам нужно настроить все пути ниже):

# Taken from https://stackru.com/questions/4036191/sources-from-subdirectories-in-makefile
# The trailing slash is required.

rwildcard=$(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2))

ALL_CPPS := $(call rwildcard,../../openjpeg-2.0.0/src/lib/openjp2,*.c)
ALL_CPPS += $(call rwildcard,../../openjpeg-2.0.0/src/lib/openjpip,*.c)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := openjpeg
LOCAL_C_INCLUDES := /path/to/openjpeg-2.0.0/src/lib/openjp2
LOCAL_SRC_FILES := $(addprefix ../,$(ALL_CPPS))

LOCAL_CFLAGS   = -DUSE_JPIP

include $(BUILD_STATIC_LIBRARY)

opj_config.h (обычно cmake создает это для платформы, для которой вы строите - но, как я упоминал выше, я не хотел иметь дело с cmake, поэтому я создал этот файл вручную):

#ifndef OPJ_CONFIG_H
#define OPJ_CONFIG_H

#define OPJ_PACKAGE_VERSION "2.0.0"

#define HAVE_INTTYPES_H 1
#define HAVE_MEMORY_H 1
#define HAVE_STDINT_H 1

#ifndef HAVE_STDLIB_H  // I had a conflict with this somewhere else in my project -- good form dictates that I should probably ifndef guard the other defines in this file as well....that is a TODO for later
#define HAVE_STDLIB_H 1
#endif

#define HAVE_STRINGS_H 1
#define HAVE_STRING_H 1
#define HAVE_SYS_STAT_H 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_UNISTD_H 1

// I'm not utilizing libpng or libtiff, so don't set these
//#cmakedefine HAVE_LIBPNG @HAVE_LIBPNG@
//#cmakedefine HAVE_PNG_H @HAVE_PNG_H@
//#cmakedefine HAVE_LIBTIFF @HAVE_LIBTIFF@
//#cmakedefine HAVE_TIFF_H @HAVE_TIFF_H@

#define HAVE_SSIZE_T 1

//#cmakedefine _LARGEFILE_SOURCE
//#cmakedefine _LARGE_FILES
//#cmakedefine _FILE_OFFSET_BITS @_FILE_OFFSET_BITS@

#define HAVE_FSEEKO 1

//#cmakedefine HAVE_LIBLCMS1
//#cmakedefine HAVE_LIBLCMS2
//#cmakedefine HAVE_LCMS1_H
//#cmakedefine HAVE_LCMS2_H

#endif // OPJ_CONFIG_H
Другие вопросы по тегам