嵌入式linux下libjpeg的小例子

本文介绍如何在Buildroot环境下编译JPEG库和lrzsz工具,并通过一个示例程序测试JPEG库的功能,包括解压和重新压缩图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

平台: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.alibjpeg.solibjpeg.so.62libjpeg.so.62.0.0。其中.a的是静态库,.so的是动态库。

2、 编译建立lrzsz

lrzszzModem协议,使用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下看到

       可以看见rzsz两个文件。

 

3、 例子简单说明

这个例子使用了静态,需要把jpeglib.hlibjpeg.a直接拷贝到当前的工作目录下。

对于jpeglib的头文件包含,需要

extern "C" {

  #include <jpeglib.h>

}

而不能是简单的#include <jpeglib.h>,那样会无法编译成功。

 

整个测试程序只有三个函数,cvt_TestReadcvt_TestWritemain。其中cvt_TestRead为读取jpg文件,cvt_TestWrite把图像数据压缩保存到指定的文件中去。

      

       具体代码详见jpegtest.cpp

 

4、 Makefile使用简单说明

工程文件名就是main函数所在的文件名,在APP这个编译选项指定

 

使用make all,编译整个工程文件,Makefile会自动把生成的可执行文件复制到根文件系统下指定的目录下,FC9260的默认路径是 /usr/bin目录下,然后自动重新制作根文件系统

使用make test,编译整个工程文件,但是不会复制可执行文件,不会制作根文件系统。

使用make clean,清除编译结果和根文件系统下的可执行文件,不会重新制作根文件系统。

使用make distclean,清除编译结果和根文件系统下的可执行文件,重新制作根文件系统

 

5、 测试简单说明

启动FC9260Linux

输入 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上,重复上述操作,查看结果

 

代码和原始图像下载

   

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值