如何把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 ;
彩色图像压缩,我一直没有实验成功,说明还有某些地方做的不正确。
我的系统: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 ;
彩色图像压缩,我一直没有实验成功,说明还有某些地方做的不正确。
相关文章推荐
- poj3155 最大密度子图
- Windows 8 系统快捷键热键列表收集
- iOS Xcode 6报错:setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key v
- POJ 2559 Largest Rectangle in a Histogram(单调栈)
- 来北京的日子(3)--排序算法
- PAT 1001.A+B Format
- 盘古分词
- 去掉两个最高分、去掉两个最低分,求平均分
- 集合
- Linux中epoll用法小结(转载)
- java实现各种排序算法
- IndentationError: unexpected indent python
- Java字符串的分割方法
- 循环select查询结果集
- [Python]Django部署问题
- java高新技术下《九》
- 欢迎使用CSDN-markdown编辑器
- 共勉
- 第8章 基于重新排序的排名方法 阅读
- 投票选班长