libjp eg 实现内存内位图的压缩及解压缩 相信使用过的朋友应该会喜欢上libjpeg,它简单易用、压缩质量可以随意控制、并且稳定性很好,但是,官方网站给提供的libjpeg 库, 不论是进行压缩时还是解压缩时,都需要用到 FILE,使得我们如果想在内存中直接压缩或解压缩图像还要自己实现相应的结构, 总之,比较麻烦,尤其对初学者,更是不知从何处入手,幸运的是,libjpeg 给我们提供了源代码,今天我就为大家介绍,怎样修改源代码, 使libjpeg 可以非常容易的直接处理内存中的图像,而无需借助文件操作。 一、建立自己的libjpeg 工程 为了修改后编译方便,也为了以后在 VC 环境下容易使用libjpeg 库,我们按以下步骤将 libjpeg 转换为 VC 环境下的工程。 1、在 VC 环境下重新建立一个空的static library 工程,工程名为 libjpeg,此处注意,新建工程不要包含 mfc,不要预编译头文件; 2、然后将 libjpeg 下的jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c jquant2.c jutils.c jmemmgr.c jchuff.h jconfig.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h jpeglib.h jversion.h 等文件拷贝到新工程的文件夹下,并将.c 文件改名为.cpp; 3、将所有的源文件及头文件添加到新建的工程中; 4、编译新工程,此时就可以生成 libjpeg.lib 了。 二、分析并修改源代码 我们知道,libjpeg 是利用FILE 进行存取图像数据的,接下来,我们就要分析一下libjpeg 是怎样利用FILE 进行存取图像数据的, 然后我们用内存拷贝的方式替换掉所有的文件操作(I/O),也就实现了内存中进行图像压缩和解压缩的目标。 下面,先分析压缩图像时 libjpeg 是怎样利用FILE 进行存储数据的。我们先看在进行图像压缩时,我们所调用的跟文件有关系的函数: jpeg_stdio_dest(j_compres_ptr cinfo, FILE *outfile); 我们找...