平台:fc9260ek,linux2.6.22
1、 编译建立Jpeg库
如果你已经有了jpeg库的话,可以忽略此节。
进入Buildroot目录,make menuconfig
选择Package Selection for the target --->
选择 Graphic libraries and applications (graphic/text) --->
选择jpeg,然退出Buildroot,保存配置
make
Buildroot将自动下载jpeglib(目前版本是jpeg-6b)编译。编译成功后,将在你的buildroot/build_arm/staging_dir/lib目录下,出现libjpeg.a、libjpeg.so、libjpeg.so.62、libjpeg.so.62.0.0。其中.a的是静态库,.so的是动态库。
2、 编译建立lrzsz
lrzsz是zModem协议,使用rz命令,FC9260EK从主机上接收文件,而我们使用sz把压缩好的jpg文件从FC9260EK上发送到自己的电脑上观察结果。
如果已经有了lrzsz,可以忽略此节
还是进入Buildroot目录,make menuconfig
选择Package Selection for the target --->
选择 Networking --->
选择 lrzsz,然退出Buildroot,保存配置
make
Buildroot可以自动下载lrzsz(目前版本lrzsz- 0.12.20 ),你可以在你的roofs下看到
可以看见rz和sz两个文件。
3、 例子简单说明
这个例子使用了静态,需要把jpeglib.h、libjpeg.a直接拷贝到当前的工作目录下。
对于jpeglib的头文件包含,需要
extern "C" {
#include <jpeglib.h>
}
而不能是简单的#include <jpeglib.h>,那样会无法编译成功。
整个测试程序只有三个函数,cvt_TestRead,cvt_TestWrite,main。其中cvt_TestRead为读取jpg文件,cvt_TestWrite把图像数据压缩保存到指定的文件中去。
具体代码详见jpegtest.cpp。
4、 Makefile使用简单说明
工程文件名就是main函数所在的文件名,在APP这个编译选项指定
使用make all,编译整个工程文件,Makefile会自动把生成的可执行文件复制到根文件系统下指定的目录下,FC9260的默认路径是 /usr/bin目录下,然后自动重新制作根文件系统
使用make test,编译整个工程文件,但是不会复制可执行文件,不会制作根文件系统。
使用make clean,清除编译结果和根文件系统下的可执行文件,不会重新制作根文件系统。
使用make distclean,清除编译结果和根文件系统下的可执行文件,重新制作根文件系统
5、 测试简单说明
启动FC9260的Linux。
输入 cd usr/bin
进入usr/bin目录后,输入 jpgtest lena.jpg testout.jpg
第一个参数是输入的源文件,用于jpg解压,程序把解压得数据重新压缩,保存到第二个参数指定的文件中去,如果文件不存在,尝试创建新文件。
如果你的根文件系统得usr/bin下没有lena.jpg,请使用rz命令发送,或者重新制作根文件系统,如果文件存在,执行结果如下:
执行完毕后,可以使用sz命令,把生成的文件发出来看看
传输完毕,结果如下:
这个质量较高,可以把cvt_TestWrite(infile,94);这行代码中的94改成1
cvt_TestWrite(infile,1);
重新执行make,然后把新的根文件系统下载到FC9260上,重复上述操作,查看结果