草庐IT

android - 使用 DevIL 时出现错误 'IL_LIB_JPEG_ERROR 1506'

coder 2023-12-18 原文

我正在编写一个使用 DevIL 的 Android 应用程序用于图像处理。我从 this project 得到了 DevIL 及其依赖库的端口.我编辑并提取了我需要的东西。它编译得很好,库也可以工作,但是当我尝试加载时却没有 JPEG文件...

使用 DevIL 错误代码,我发现错误编号为 1506,它转换为 IL_LIB_JPEG_ERROR,这意味着我的 JPEG 库中存在问题。我尝试更新到最新的 JPEG 库,但都失败了。我还尝试了其他 JPEG 文件,但没有成功。

这是我的 android.mk 文件,显示了 JPEG 和 DevIL 模块 fragment :

JPG

#libjpeg
include $(CLEAR_VARS)

LOCAL_MODULE    := libjpeg
LOCAL_CFLAGS    := -g -Dlinux -DFT2_BUILD_LIBRARY=1 -DPHYSFS_NO_CDROM_SUPPORT=1 -DAL_ALEXT_PROTOTYPES=1 -DHAVE_GCC_DESTRUCTOR=1 -DOPT_GENERIC -DREAL_IS_FLOAT
LOCAL_CPPFLAGS  := ${LOCAL_CFLAGS}

LOCAL_C_INCLUDES  :=  \
    ${JPEG_SRC_PATH}

LOCAL_SRC_FILES := \
    ${JPEG_SRC_PATH}jquant1.c \
    ${JPEG_SRC_PATH}jdtrans.c \
    ${JPEG_SRC_PATH}jerror.c \
    ${JPEG_SRC_PATH}wrppm.c \
    ${JPEG_SRC_PATH}jcparam.c \
    ${JPEG_SRC_PATH}jdmarker.c \
    ${JPEG_SRC_PATH}jidctfst.c \
    ${JPEG_SRC_PATH}jctrans.c \
    ${JPEG_SRC_PATH}cdjpeg.c \
    ${JPEG_SRC_PATH}jcomapi.c \
    ${JPEG_SRC_PATH}jmemansi.c \
    ${JPEG_SRC_PATH}jquant2.c \
    ${JPEG_SRC_PATH}wrtarga.c \
    ${JPEG_SRC_PATH}transupp.c \
    ${JPEG_SRC_PATH}jdmerge.c \
    ${JPEG_SRC_PATH}jdhuff.c \
    ${JPEG_SRC_PATH}jdmaster.c \
    ${JPEG_SRC_PATH}jcprepct.c \
    ${JPEG_SRC_PATH}jutils.c \
    ${JPEG_SRC_PATH}jccoefct.c \
    ${JPEG_SRC_PATH}jccolor.c \
    ${JPEG_SRC_PATH}jdatasrc.c \
    ${JPEG_SRC_PATH}jcdctmgr.c \
    ${JPEG_SRC_PATH}wrrle.c \
    ${JPEG_SRC_PATH}jcapimin.c \
    ${JPEG_SRC_PATH}jfdctfst.c \
    ${JPEG_SRC_PATH}rdrle.c \
    ${JPEG_SRC_PATH}wrbmp.c \
    ${JPEG_SRC_PATH}jdarith.c \
    ${JPEG_SRC_PATH}jidctint.c \
    ${JPEG_SRC_PATH}jcsample.c \
    ${JPEG_SRC_PATH}jaricom.c \
    ${JPEG_SRC_PATH}jdcolor.c \
    ${JPEG_SRC_PATH}jdapistd.c \
    ${JPEG_SRC_PATH}jdmainct.c \
    ${JPEG_SRC_PATH}jddctmgr.c \
    ${JPEG_SRC_PATH}jcmaster.c \
    ${JPEG_SRC_PATH}jfdctflt.c \
    ${JPEG_SRC_PATH}rdgif.c \
    ${JPEG_SRC_PATH}jcarith.c \
    ${JPEG_SRC_PATH}rdcolmap.c \
    ${JPEG_SRC_PATH}wrgif.c \
    ${JPEG_SRC_PATH}jdcoefct.c \
    ${JPEG_SRC_PATH}rdbmp.c \
    ${JPEG_SRC_PATH}jdapimin.c \
    ${JPEG_SRC_PATH}jdsample.c \
    ${JPEG_SRC_PATH}jidctflt.c \
    ${JPEG_SRC_PATH}rdppm.c \
    ${JPEG_SRC_PATH}rdtarga.c \
    ${JPEG_SRC_PATH}jchuff.c \
    ${JPEG_SRC_PATH}jcmarker.c \
    ${JPEG_SRC_PATH}jdpostct.c \
    ${JPEG_SRC_PATH}jfdctint.c \
    ${JPEG_SRC_PATH}jcinit.c \
    ${JPEG_SRC_PATH}jmemmgr.c \
    ${JPEG_SRC_PATH}jcmainct.c \
    ${JPEG_SRC_PATH}jcapistd.c \
    ${JPEG_SRC_PATH}rdswitch.c \
    ${JPEG_SRC_PATH}jdatadst.c \
    ${JPEG_SRC_PATH}jdinput.c

LOCAL_LDLIBS    := -llog -L../lib -lGLESv1_CM
LOCAL_STATIC_LIBRARIES := libphysfs

include $(BUILD_SHARED_LIBRARY)

魔鬼模块

#libdevil
include $(CLEAR_VARS)

LOCAL_MODULE    := libdevil
LOCAL_CFLAGS    := -g -Dlinux -DFT2_BUILD_LIBRARY=1 -DPHYSFS_NO_CDROM_SUPPORT=1 -DAL_ALEXT_PROTOTYPES=1 -DHAVE_GCC_DESTRUCTOR=1 -DOPT_GENERIC -DREAL_IS_FLOAT -fexceptions
LOCAL_CPPFLAGS  := ${LOCAL_CFLAGS}

LOCAL_C_INCLUDES  :=  \
    ${DEVIL_SRC_PATH}include \
    ${DEVIL_SRC_PATH}src-IL/include \
    ${DEVIL_SRC_PATH}src-ILU/include \
    ${JASPER_SRC_PATH}src/libjasper/include \
    ${PHYSFS_SRC_PATH} \
    ${PHYSFS_SRC_PATH}zlib123 \
    ${PNG_SRC_PATH} \
    ${MNG_SRC_PATH} \
    ${JPEG_SRC_PATH} \
    ${LCMS_SRC_PATH}include/ \
    ${TIFF_SRC_PATH}libtiff/ \

LOCAL_SRC_FILES := \
    ${DEVIL_SRC_PATH}src-IL/src/il_sun.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_wdp.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_doom.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_jp2.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_tpl.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_size.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_rle.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_gif.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_states.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_psp.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_devil.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_convbuff.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_ftx.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_vtf.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_iff.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_lif.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_pcx.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_io.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_files.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_fastconv.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_error.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_main.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_utx.cpp \
    ${DEVIL_SRC_PATH}src-IL/src/il_pcd.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_neuquant.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_dds.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_dicom.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_wal.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_icon.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_blp.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_mp3.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_header.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_alloc.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_sgi.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_stack.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_texture.c \
    ${DEVIL_SRC_PATH}src-IL/src/altivec_typeconversion.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_targa.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_bmp.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_mdl.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_pix.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_pnm.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_ilbm.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_icns.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_cut.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_profiles.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_hdr.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_register.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_exr.cpp \
    ${DEVIL_SRC_PATH}src-IL/src/il_iwi.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_mng.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_rot.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_jpeg.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_png.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_pxr.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_nvidia.cpp \
    ${DEVIL_SRC_PATH}src-IL/src/il_squish.cpp \
    ${DEVIL_SRC_PATH}src-IL/src/il_utility.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_internal.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_psd.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_endian.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_quantizer.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_wbmp.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_manip.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_pic.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_tiff.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_pal.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_dds-save.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_raw.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_convert.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_dcx.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_fits.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_xpm.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_bits.c \
    ${DEVIL_SRC_PATH}src-IL/src/altivec_common.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_dpx.c \
    ${DEVIL_SRC_PATH}src-IL/src/il_rawdata.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_alloc.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_error.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_filter_rcg.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_filter.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_internal.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_main.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_manip.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_mipmap.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_noise.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_region.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_rotate.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_scale.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_scale2d.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_scale3d.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_scaling.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_states.c \
    ${DEVIL_SRC_PATH}src-ILU/src/ilu_utilities.c \

LOCAL_LDLIBS    := -llog -L../lib -lGLESv1_CM

LOCAL_STATIC_LIBRARIES := \
    libjasper \
    libpng \
    libmng \
    libjpeg \
    liblcms \
    libphysfs \
    libtiff

include $(BUILD_SHARED_LIBRARY)

我的 C++ 文件的模块在文件 android.mk 中:

#mylib
include $(CLEAR_VARS)
LOCAL_MODULE    := libmylib
LOCAL_CFLAGS    := -g -Dlinux -DFT2_BUILD_LIBRARY=1 -DPHYSFS_NO_CDROM_SUPPORT=1 -DAL_ALEXT_PROTOTYPES=1 -DHAVE_GCC_DESTRUCTOR=1 -DOPT_GENERIC -DREAL_IS_FLOAT -fexceptions
LOCAL_CPPFLAGS  := ${LOCAL_CFLAGS}
LOCAL_C_INCLUDES  :=  \
    ${DEVIL_SRC_PATH}include \
    ${DEVIL_SRC_PATH}src-IL/include \
    ${DEVIL_SRC_PATH}src-ILU/include \
    ${JASPER_SRC_PATH}src/libjasper/include \
    ${PHYSFS_SRC_PATH} \
    ${PHYSFS_SRC_PATH}zlib123 \
    ${PNG_SRC_PATH} \
    ${MNG_SRC_PATH} \
    ${JPEG_SRC_PATH} \
    ${LCMS_SRC_PATH}include/ \
    ${TIFF_SRC_PATH}libtiff/ \


LOCAL_SRC_FILES := com_myproject_MainActivity.cpp

LOCAL_LDLIBS    := -llog -lGLESv2

LOCAL_STATIC_LIBRARIES := \
    libjasper \
    libpng \
    libmng \
    libjpeg \
    liblcms \
    libphysfs \
    libtiff \
    libdevil \

include $(BUILD_SHARED_LIBRARY)

这是调用 DevIL 的 com_myproject_MainActivity.cpp 文件,还链接到 Android 部分:

//#include "com_myproject_MainActivity.h"
#include <string.h>
#include <jni.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#ifdef HAVE_CONFIG_H
#include <devil-1.7.8/include/IL/config.h>
#endif /* HAVE_CONFIG_H */

#include <devil-1.7.8/include/IL/il.h>
#include <devil-1.7.8/include/IL/ilu.h>
#include <devil-1.7.8/include/IL/ilut.h>

/* We would need ILU just because of iluErrorString() function... */
/* So make it possible for both with and without ILU!  */

#ifdef ILU_ENABLED
#include <devil-1.7.8/include/IL/ilu.h>
/*#define PRINT_ERROR_MACRO printf("Error: %s\n", iluErrorString(Error))
#else /* not ILU_ENABLED */
#define PRINT_ERROR_MACRO printf("Error: 0x%X\n", (unsigned int)Error)
#endif /* not ILU_ENABLED */

extern "C" {
    JNIEXPORT jint JNICALL Java_com_myproject_MainActivity_convert
    (JNIEnv * env, jclass c, jstring file, jstring file2){
        //'file' is the path to incoming file, and 'file2' is the path to the file to be created.

        const char * cfile = env->GetStringUTFChars(file, NULL);
        const char * cfile2 = env->GetStringUTFChars(file2, NULL);
        ILuint    ImgId ;
        ILenum    Error;

        // Initialize DevIL.
        ilInit();
        #ifdef ILU_ENABLED
            iluInit();
        #endif

        int x= 0;

        // Generate the main image name to use.
        ilGenImages(1, &ImgId);

        ilBindImage(ImgId);

        ILboolean result = ilLoadImage(cfile); //Loads the file. Returns boolean.

        if (result == true) //x is 1 if operation was successful
        {
            x = 1;
        }
        else
        {
            ILenum err = ilGetError() ;
            x = err; //x becomes error number if fails e.g 1506 if there is an error in LIB_JPEG
            //printf( "string is %s\n", ilGetString( err ) );
        }
        /*ilEnable(IL_FILE_OVERWRITE);

        ILboolean result2 = ilSaveImage(cfile2);

        if( result2 == true )
        {
            x = 2;
        }
        else
        {
            ILenum err = ilGetError() ;
            x = err;
            //printf( "string is %s\n", ilGetString( err ) );
        }
        ilDeleteImages(1, &ImgId);*/

        env->ReleaseStringUTFChars(file, cfile);
        env->ReleaseStringUTFChars(file2, cfile2);

        return x;
    }
};

最佳答案

在构建 DevIL 时指定 -DFT2_BUILD_LIBRARY=1库本身。这是正确的。

但是,当您构建自己的与 DevIL 链接的应用程序时,您需要再次指定标志 -DFT2_BUILD_LIBRARY=1。这意味着 DevIL 头文件会被误导,认为它们是为库本身而不是为第三方应用程序构建的。

关于android - 使用 DevIL 时出现错误 'IL_LIB_JPEG_ERROR 1506',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18045362/

有关android - 使用 DevIL 时出现错误 'IL_LIB_JPEG_ERROR 1506'的更多相关文章

  1. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  2. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  3. ruby - ECONNRESET (Whois::ConnectionError) - 尝试在 Ruby 中查询 Whois 时出错 - 2

    我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.

  4. ruby-on-rails - Ruby on Rails : . 常量化 : wrong constant name error? - 2

    我正在使用这个:4.times{|i|assert_not_equal("content#{i+2}".constantize,object.first_content)}我之前声明过局部变量content1content2content3content4content5我得到的错误NameError:wrongconstantnamecontent2这个错误是什么意思?我很确定我想要content2=\ 最佳答案 你必须用一个大字母来调用ruby​​常量:Content2而不是content2。Aconstantnamestart

  5. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  6. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  7. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  8. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  9. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  10. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

随机推荐