4

質問があります。

Android で OpenJPEG を使用するにはどうすればよいですか? (私は主に「j2k_to_image」を使いたいと思っています。)

メイクファイルの書き方を教えてください。前もって感謝します。

4

1 に答える 1

4

次のアウトラインを使用して、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を使用しています(組み込みではありません) 、およびこのスタックオーバーフローの投稿はandroid-cmakeを参照しています。android-cmakeのドキュメントは、Windows では動作しない可能性があることを示しています)。私の opj_config.h については以下を参照してください。それはあなたのために働くはずです。インクルードパスのどこかに必ず配置してください。
  5. Android NDK 静的ライブラリ プロジェクトをビルドする
  6. スタティック ライブラリをメイン プロジェクトで参照する

これで、JPEG2000 画像を A​​ndroid 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
于 2013-11-10T18:27:00.450 に答える