当前位置: 首页 > news >正文

09第三方库的使用

1.下载第三方库源码 (例如:jpeg解码库)

Independent JPEG Group

即下载jpeg的源码到电脑的每个文件中(要记得是下载到哪里了)然后登陆ubantu中建立一个文件将源码cp到该文件中,然后第一步解压源码,第二步创建一个安装目录jpeglib配置源码,为的就是得到.o文件和动态库和静态库,第三步,解压配置好的库文件到家目录,会得到官方例子代码和头文件。最后就是编译,此过程会遇到各种问题:分别是,start文件,即没有main.c文件,我们可以进入目录创建一个main.c 文件即可解决,第二个是example.c中的375行put_scanline_someeplace()函数先屏蔽了,第三个是编译时要链接jpeg的库(记得他的库放在哪的就链接到哪就行,-I./include -L/home/gec/jpeglib/lib -ljpeg),第四个就是没有定义长宽,色深啊这些有关的也屏蔽掉在读取函数中,第五个就是上传到开发板上不能编译怎么办?把所有的动态库文件上传到开发板的/bin目录下就可以解决了,下面是详细的步骤

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库的使用 (✔️)怎么使用该库来显示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,译音八分贝,道友,下期见!


http://www.mrgr.cn/news/93702.html

相关文章:

  • VBA 数据库同一表的当前行与其他行的主键重复判断实现方案
  • 迅投miniQMT量化交易之【网格交易】的实现(七)——__init__()方法
  • 【网络】HTTP协议、HTTPS协议
  • 【linux网络编程】套接字编程API详细介绍
  • 08动态库与静态库
  • element-plus中table组件的使用
  • 算法进阶——双指针
  • c语言笔记 数组进阶题目的理解
  • 渗透测试之利用sql拿shell(附完整流程+防御方案)【上】
  • OpenManus:开源版Manus的快速安装及使用「喂饭教程」
  • 数据结构--【顺序表与链表】笔记
  • python中如何正确进行浮点数的大小比较
  • 【让POSTGRESQL支持MS SQLSERVER的 extension】 Babelfish for PostgreSQL介绍及源码安装
  • 数据库原理6
  • mysql8.0使用PXC实现高可用部署
  • 【Git】创建,切换分支
  • 华为配置篇-OSPF基础实验
  • Spark八股
  • 【基础知识】回头看Maven基础
  • 【Java代码审计 | 第七篇】文件上传漏洞成因及防范