2015-12-04 73 views
0

我已經實現了使用自定義的工作文件處理的PNGLIB提供自定義文件IO:與libjpeg的

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

而不是png_init_io(png_ptr, fp);它採用標準的fread,fwrite的調用。

我現在想用libjpeg實現同樣的事情。

它看起來不像是有一個簡單的函數傳遞解決方案,如pnglib庫。所以我編輯了ligjpeg的jinclude.h,所以宏JFREAD和JFWRITE現在分別調用myReadFn和myWriteFn。這也需要添加包含myReadFn和myWriteFn的聲明。

添加include會導致許多libjpeg文件出現編譯錯誤,從我讀過的內容看來,當libjpeg爲'C'編譯時,似乎試圖編譯爲C++。

2> jutils.c

C:\ Program Files文件(x86)的\微軟的Visual Studio 12.0 \ VC \包括\ xtgmath.h(214):警告C4602:的#pragma pop_macro: '新' 以前沒有此標識符的#pragma push_macro

C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ include \ xtgmath.h(215):warning C4193:#pragma warning(pop):no matching'#pragma警告(推)'

C:\ Program Files文件(x86)\ Microsoft Visual Studio 12.0 \ VC \ include \ xtgmath.h(216):warning C4161:#pragma pack(pop ...):more pops than推

C:\程序文件(x86)\微軟的Visual Studio 12.0 \ VC \包括\ CMATH(23):錯誤C2061:語法錯誤:標識符 'ABS' ...... //更多的負載

回答

1

您可以創建自己的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)); 
+0

的jinclude.h東西被證明是一個紅色的鯡魚,所以我回復,早實施了根據您的建議定製經理。謝謝! – Hinchy