gpt4 book ai didi

android - 为 Android 构建 OpenJPEG

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:12:46 49 4
gpt4 key购买 nike

我有一个问题。

我要在 Android 上使用 OpenJPEG 做什么?(我的“j2k_to_image”主要是想用。)

我希望你能告诉我如何编写 makefile。提前致谢。

最佳答案

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

由于我们讨论的是 OpenJPEG,因此本回答假定您熟悉并计划将 Android NDK 用于您的应用。它还假定您使用的是 Android IDE 的 Eclipse 版本。答案还假定您熟悉静态库如何与 Android NDK 一起工作以及如何将它们引用到您的主应用程序中。您可以在下面扩展我的答案以创建共享库或将代码直接包含到您的应用程序中。如果您不熟悉这些先决条件,stackoverflow 和 Google 可以提供帮助。

我在 Android NDK r8e 和 OpenJPEG 2.0.0 上取得了成功。

步骤:

  1. http://www.openjpeg.org/index.php?menu=download 下载并展开 OpenJPEG 2.0.0
  2. 在 Eclipse 中创建本地项目。我创建了一个项目,允许我将 OpenJPEG 用作静态库
  3. 在我的项目的 jni 文件夹中,我将以下内容用于我的 Application.mk 和我的 Android.mk 文件。见下文。
  4. 创建自定义 opj_config.h。 OpenJPEG 旨在使用 cmake 进行编译。由于多种原因我不想处理它——我的其他内容都不依赖它(因此它会增加另一层复杂性),我在 Windows 上(它没有内置,并且这个 stackoverflow post 引用了 android-cmake ,android-cmake 的文档表明它可能无法在 Windows 上运行)。请参阅下面的 opj_config.h。它应该适合你。确保将它放在包含路径中的某个位置。
  5. 构建Android NDK静态库项目
  6. 将您的静态库引用到您的主项目中

这样,我就能够成功地将 JPEG2000 图像加载到我的基于 Android NDK 的应用中。

应用程序.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

关于android - 为 Android 构建 OpenJPEG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12575534/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com