使用 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));
我已经为 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));