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