首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为Android构建OpenJPEG

为Android构建OpenJPEG
EN

Stack Overflow用户
提问于 2012-09-25 02:39:50
回答 1查看 1.6K关注 0票数 4

我有个问题。

我该怎么做--我在安卓系统上使用OpenJPEG?(我的"j2k_to_image“主要是想使用。)

我想让你告诉我怎么写一个makefile。提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-11-10 18:27:00

我可以使用下面的大纲构建+使用OpenJPEG将JPEG2000图像加载到我的应用程序中。您必须根据您的环境以及您想如何使用它来定制它。我的答案提供了粗略的指导方针,并给出了我遇到的主要障碍的具体答案(我的Android.mk和Application.mk文件应该是什么,以及如何处理OpenJPEG库需要cmake这一事实)。

由于我们谈论的是OpenJPEG,这个答案假设您熟悉并计划在您的应用程序中使用Android。它还假设您使用的是Android的Eclipse版本。答案还假设您熟悉静态库如何使用Android,以及如何将它们引用到您的主应用程序中。您可以在下面扩展我的答案,以创建一个共享库,或者将代码直接包含到应用程序中。如果您不熟悉这些先决条件,堆栈溢出和Google可以提供帮助。

我成功地使用了Android r8e和OpenJPEG 2.0.0。

步骤:

  1. 从OpenJPEG下载并展开http://www.openjpeg.org/index.php?menu=download 2.0.0
  2. 在Eclipse中创建一个本机项目。我创建了一个项目,允许我使用OpenJPEG作为静态库。
  3. 在我的项目的jni文件夹中,我在我的Application.mk和Android.mk文件中使用了以下内容。见下文。
  4. 创建一个自定义opj_config.h。OpenJPEG是用cmake编译的。我不想处理这个问题,原因有很多--我的其他内容都不依赖它(所以它会增加另一层的复杂性),我在Windows上(它没有内置,而且这个堆叠溢流柱引用了安卓-cmake,用于android的文档表明它可能不能在Windows上运行)。关于我的opj_config.h,请看下面。它应该对你有用。一定要把它放在包含路径中的某个地方。
  5. 构建Android静态库项目
  6. 将静态库引用到主项目中

有了这个功能,我就能够成功地将一个JPEG2000图像加载到基于Android的应用程序中。

Application.mk:

代码语言:javascript
复制
APP_ABI := all
APP_PLATFORM := android-9
APP_MODULES := openjpeg

Android.mk (您必须自定义以下所有路径):

代码语言:javascript
复制
# 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,所以我手工创建了这个文件):

代码语言:javascript
复制
#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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12575534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档