1.下载第三方库源码 (例如:jpeg解码库)
Independent JPEG Group
2.解压库源码&配置源码
1.解压源码
mkdir ~/jpegsrc
tar -xvf jpegsrc.v9d.tar.gz -C ~/jpegsrc/2.配置源码 cd ~/jpegsrc/jpeg-9d/ #1.进入源码目录 ./configure --help #2.查看配置帮助文档 配置参数说明👇........--prefix=PREFIX install architecture-independent files in PREFIX[/usr/local] 安装库的路径 --host=HOST cross-compile to build programs to run on HOST [BUILD] ............ mkdir /home/gec/jpeglib #3.0创建一个安装目录 echo 'export PATH=$PATH:/usr/local/arm/5.4.0/usr/bin' >> ~/.bashrc #3.1配置PATH环境变量 source ~/.bashrc #加载配置文件./configure --prefix=/home/gec/jpeglib --host=arm-linux #3.2⭐重点:开始配置 make #4.编译 👉 调用makefile 文件生成 .o 和动态库与静态库 make install #5.安装
3.jpeg库的使用 (✔️)
1.解压配置好的库文件到家目录
tar -xvf jpeglib.tar.gz -C /home/gec 2.把调用官方的示例代码,进行解码gec@PC-20240429TQJF:官方解码例子$ ls
example.c (官方解码例子) include (头文件) main.c (主函数)3.编译官方示例代码 👉编译过程中出现的问题自己解决一下
gec@PC-20240429TQJF:官方解码例子$ arm-linux-gcc main.c example.c -I./include -L/home/gec/jpeglib/lib -ljpeg4.下载可执行文件到开发板中运行
[root@GEC6818 /]#./a.out
./a.out: error while loading shared libraries: libjpeg.so.9 ❌出现错误, 解决方法:把jpeg库下载到开发板的 /lib 目录
4.jpeg 解码源码分析
//解码结构体
struct jpeg_decompress_struct {JDIMENSION image_width; /* 图片宽度*/JDIMENSION image_height; /* 图片高度*/int num_components; /* # of color components in JPEG image 色深*/
}//1.读取jpeg头数据 (void)jpeg_read_header(&cinfo, TRUE); // 读取jpeg文件头// 打印图片的信息printf("%d %d %d\n", cinfo.image_width, cinfo.image_height, cinfo.num_components);
5、jpeg 转 rgb 算法设计
主要代码:
char rgb[480][800 * 3] = {0};int y = 0; // 当前行// 一行一行的解码while (cinfo.output_scanline < cinfo.output_height){printf("当前解码行 %d : 总行数 %d\n", cinfo.output_scanline, cinfo.output_height);(void)jpeg_read_scanlines(&cinfo, buffer, 1); // 解码一行jpeg数据for (int x = 0; x < 800 * 3; x++){rgb[y][x] = buffer[0][x];}y++; // 行数增加}// 把RGB转换为ARGBchar argb[480][800 * 4];for (int y = 0; y < 480; y++){for (int x = 0; x < 800; x++){argb[y][2 + x * 4] = rgb[y][0 + x * 3]; // Rargb[y][1 + x * 4] = rgb[y][1 + x * 3]; // Gargb[y][0 + x * 4] = rgb[y][2 + x * 3]; // Bargb[y][3 + x * 4] = 0; // A}}
至此,希望看完这篇文章的你有所收获,我是Bardb,译音八分贝,道友,下期见!