如何把libjpeg库移植到mini2440arm板上。

本文主要讲如何把libjpeg库移植到mini2440arm板上。
我的系统:Fedora11
编译工具:arm-linux-gcc
第一步下载libjpeg库
下载地址 http://www.ijg.org/
下载jpegsrc.v9a.tar.gz这个文件
第二步
解压这个文件
第三步
打开终端,切换到解压的目录
执行
./configure --prefix=/usr/local/lib CC=arm-linux-gcc --host=arm-linux --enable-shared --enable-static
第四步
执行
make
可能需要几分钟。
执行
make install 

第五步
库的使用
前面几步如果有什么问题请自行google或者阅读解压目录下的install.txt文件。
把下面几个文件拷贝到你的程序目录下
jmorecfg.h、jpeglib.h、jerror.h、jconfig.h
这几个文件的位置就在/usr/local/lib下面
在你的源代码中加入
#include "jpeglib.h"
然后加入文章最后的压缩函数,中间WIDTH/HEIGHT/ JPEG_QUALITY几个值根据自己情况进行宏定义。
另外编译的时候请一定使用下面的方法
执行
arm-linux-gcc -o 你的输出 你的程序 -L/usr/local/lib -l:libjpeg.so.9
下面这段话是解释,来自 http://bbs.witech.com.cn/thread-8131-1-1.html。上面-L后面的路径可以根据自己目录更改。
编译时千万别以为加入了-ljpeg参数就可以了,老问题,编译器会给你链接libjpeg6的库,要指定库-l:libjpeg.so.8,如果找不到,前面再指定库目录 -L/你libjpeg的安装目录/lib,这样就一切完美了”

第六步
把/usr/local/lib文件夹下面的 libjp.so.9这个动态库文件拷贝到arm板上lib库里。
然后在arm板上执行程序。
注意
如果出现库的版本的问题。一定按照步骤五的方法,加上-L 和-l.
int bmp2jpeg_compress(unsigned char *inbuf, unsigned char **outbuf,unsigned long *outSize)
{
int jpegWidth = WIDTH;//jpeg的宽度;
int jpegHeight = HEIGHT;//jpeg的高度;
//开始进行jpg的数据写入
struct jpeg_compress_struct toWriteCinfo;
struct jpeg_error_mgr jerr;
JSAMPROW row_pointer[1];
int row_stride;

toWriteCinfo.err = jpeg_std_error(&jerr);
jpeg_create_compress(&toWriteCinfo);
//确定要用于输出压缩的jpeg的数据空间
jpeg_mem_dest(&toWriteCinfo, outbuf,outSize);

toWriteCinfo.image_width = jpegWidth;
toWriteCinfo.image_height = jpegHeight;
toWriteCinfo.input_components = 1;
toWriteCinfo.in_color_space = JCS_GRAYSCALE;

jpeg_set_defaults(&toWriteCinfo);
jpeg_set_quality(&toWriteCinfo, JPEG_QUALITY, TRUE);
jpeg_start_compress(&toWriteCinfo,TRUE);
row_stride = jpegWidth ;//如果图片为RGB,这个值要*3.灰度图像不用。
while(toWriteCinfo.next_scanline < toWriteCinfo.image_height)
{
row_pointer[0] = & inbuf[toWriteCinfo.next_scanline * row_stride];
(void)jpeg_write_scanlines(&toWriteCinfo, row_pointer, 1);
}
jpeg_finish_compress(&toWriteCinfo);
jpeg_destroy_compress(&toWriteCinfo);
return 0;
}

另外
压缩参数设置不正确,也会弹出一个错误。
toWriteCinfo.image_width = jpegWidth;
toWriteCinfo.image_height = jpegHeight;
toWriteCinfo.input_components = 1;
toWriteCinfo.in_color_space = JCS_GRAYSCALE;
如上压缩参数一共有四个,前两个不说,很简单。
第三个参数如果是灰度图,一定要设置成1,这个是貌似是通道数。对应的第四个参数一定要设置成JCS_GRAYSCALE。
如果是RGB图像,第三个参数设置成3,然后第四个参数设置成JCS_RGB。
再后面还有一句话
row_stride = jpegWidth ;
如果是灰度图,这条语句就没有问题,如果是RGB图,这个语句要改成
row_stride = jpegWidth*3 ;
彩色图像压缩,我一直没有实验成功,说明还有某些地方做的不正确。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
libjpeg-turbo移植到单片机是一个相对复杂的任务,需要解决许多技术挑战。libjpeg-turbo是一个开源的JPEG图像解压缩,它提供了高效的图像解码和编码功能。为了将其移植到单片机平台,需要考虑以下几个方面。 首先,单片机通常资源有限,存储和计算能力较弱。因此,需要对libjpeg-turbo进行裁剪和优化,以适应单片机的硬件限制。这可能包括删除一些不必要的功能或减小的规模,以减少内存消耗和代码大小。 其次,单片机通常使用特定的嵌入式操作系统或裸机环境。需要修改源代码,使其与目标单片机平台兼容,并适应特定的操作系统接口或裸机API。 第三,JPEG图像编解码是一个计算密集型任务,需要大量的运算和存储空间。单片机上的处理能力和RAM容量有限,因此需要一些创新的方法来缓解这些限制。例如,可以通过减少图像分辨率、调整图像质量参数或使用流式处理等技术来优化JPEG图像压缩和解压缩过程。 最后,由于单片机通常没有专门的图像输入和输出接口,还需要解决图像数据的传输和存储问题。可能需要使用外部存储器(如SD卡)来存储JPEG图像,并通过串行通信接口(如UART)将图像数据传输到单片机进行处理。 总体而言,将libjpeg-turbo移植到单片机需要综合考虑硬件限制、软件适配和资源优化等因素。这需要有经验丰富的开发人员,对单片机的架构和嵌入式系统开发有深入的了解。但是,一旦成功移植,单片机就能够快速、有效地处理JPEG图像,为特定应用场景提供高质量的图像处理能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值