您的位置:首页 > 其它

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

2015-07-14 21:43 357 查看
本文主要讲如何把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 ;
彩色图像压缩,我一直没有实验成功,说明还有某些地方做的不正确。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: