Построить OpenJPEG для Android

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

Что я должен использовать OpenJPEG на Android? (Я просто хочу использовать j2k_to_image).

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

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

Поскольку мы говорим об OpenJPEG, этот ответ предполагает, что вы знакомы и планируете использовать Android NDK для своего приложения. Также предполагается, что вы используете версию Eclipse для Android IDE. Ответ также предполагает, что вы знакомы с тем, как статические библиотеки работают с Android NDK и как ссылаться на них в основное приложение. Вы можете расширить мой ответ ниже, чтобы создать общую библиотеку или включить код прямо в ваше приложение. Если вы не знакомы с этими предварительными условиями, может помочь stackoverflow и 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-папке моего проекта я использовал следующие файлы для своих приложений и файлов Android.mk. Смотри ниже.
  4. Создайте пользовательский opj_config.h. OpenJPEG предназначен для компиляции с помощью cmake. Я не хотел иметь дело с этим по ряду причин: ни один из моих других материалов не полагался на него (поэтому он добавил бы еще один уровень сложности), я нахожусь в Windows (у которого нет встроенного , И этот postoffflow post ссылается на 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://stackoverflow.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