使用 libjpeg 提供自定义文件 IO

providing custom file IO with libjpeg

我已经为 pnglib 实现了一个有效的自定义文件处理,使用:

png_set_read_fn( png_ptr, file, myReadFn );
png_set_write_fn( png_ptr, file, mywriteFn);

而不是使用标准 fread、fwrite 调用的 png_init_io( png_ptr, fp );

我现在想用 libjpeg 实现同样的功能。

看起来不像pnglib库那样有简单的函数传递解决方案。所以我编辑了 ligjpeg 的 jinclude.h,因此宏 JFREAD 和 JFWRITE 现在分别调用 myReadFn 和 myWriteFn。这还需要包含添加,其中包含 myReadFn 和 myWriteFn 的声明。

添加包含它会导致许多 libjpeg 文件出现编译错误,据我所知,当为 'C'.

构建 libjpeg 时,它似乎试图编译为 C++

2>jutils.c

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xtgmath.h(214): 警告 C4602: #pragma pop_macro : 'new' 否previous #pragma push_macro 这个标识符

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xtgmath.h(215): 警告 C4193: #pragma warning(pop) : 没有匹配的 '#pragma warning(推)'

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xtgmath.h(216):警告 C4161:#pragma pack(pop...):弹出多于推送

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\cmath(23):错误 C2061:语法错误:标识符 'abs' ...... // 加载更多

您可以创建自己的 jpeg_source_mgr(例如,参见 http://www.cs.stanford.edu/~acoates/decompressJpegFromMemory.txt

也许这些功能也有用

/* Data source and destination managers: memory buffers. */
EXTERN(void) jpeg_mem_dest JPP((j_compress_ptr cinfo,
                   unsigned char ** outbuffer,
                   unsigned long * outsize));
EXTERN(void) jpeg_mem_src JPP((j_decompress_ptr cinfo,
                  unsigned char * inbuffer,
                  unsigned long insize));