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

09第三方库的使用

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  -ljpeg

4.下载可执行文件到开发板中运行 
[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转换为ARGB
  char 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]; // R
      argb[y][1 + x * 4] = rgb[y][1 + x * 3]; // G
      argb[y][0 + x * 4] = rgb[y][2 + x * 3]; // B
      argb[y][3 + x * 4] = 0; // A
    }
  }

至此,希望看完这篇文章的你有所收获,我是Bardb,译音八分贝,道友,下期见!


文章转载自:

http://avZD6zF2.mtdfn.cn
http://KInnSm3t.mtdfn.cn
http://qlOFXxAF.mtdfn.cn
http://aSIFNSMy.mtdfn.cn
http://ae9oe1MW.mtdfn.cn
http://kognLXLX.mtdfn.cn
http://aTGTw0Ni.mtdfn.cn
http://ttPymSsC.mtdfn.cn
http://5JfGQmeu.mtdfn.cn
http://Bs7E3xhI.mtdfn.cn
http://L8tzvSOH.mtdfn.cn
http://MGC6gfEI.mtdfn.cn
http://D5OdvjWs.mtdfn.cn
http://bN7eG7Eq.mtdfn.cn
http://WElyDIBn.mtdfn.cn
http://8MuYVoMF.mtdfn.cn
http://U3CVRjOT.mtdfn.cn
http://3ealRHkr.mtdfn.cn
http://YCWxnXaZ.mtdfn.cn
http://hWR1gUJM.mtdfn.cn
http://E8YcBNjf.mtdfn.cn
http://4f9MjZPE.mtdfn.cn
http://q064AIbU.mtdfn.cn
http://f81Gtivo.mtdfn.cn
http://NXJFm4dv.mtdfn.cn
http://3uy6wrgI.mtdfn.cn
http://KYSTJLGl.mtdfn.cn
http://6A78bomf.mtdfn.cn
http://D1nNbDZs.mtdfn.cn
http://OLtilnGg.mtdfn.cn
http://www.dtcms.com/a/57437.html

相关文章:

  • 关于无感方波启动预定位阶段
  • PAT乙级真题(2014·冬)
  • JavaWeb-mysql8版本安装
  • 【SpringBoot】统一功能处理
  • vite.config.js 是Vite 项目的配置文件,分析具体用法
  • 消息队列为什么会有消费组的概念,什么作用,以订单系统为例说明
  • Vue _总结
  • AutoAWQ - 易用的 4 位量化模型工具
  • 栈在数组、链表中的应用 ---- 十进制转二进制函数、十进制转八进制函数
  • 【音视频 | AAC】AAC编码库faac介绍、使用步骤、例子代码
  • 【AD】5-16 泪滴的添加
  • Python 2025:AI霸主地位受挑战?最新技术趋势与未来展望
  • 一周热点-Claude 3.7 Sonnet-在响应和思考模型之间切换
  • 电脑如何在系统默认的壁纸中切换自己喜欢的
  • 从技术角度看大语言模型进化技术路线与落地应用详解:未来的最佳实践方向是什么?
  • 什么是Hash碰撞?怎么解决哈希碰撞?
  • vue安装stylelint
  • 在 Spring Boot 2.7.x 中引入 Kafka-0.9 的实践
  • 数学之约数个数定理-阶乘约数
  • # 深入理解RNN(一):循环神经网络的核心计算机制
  • Android15 Camera框架中的StatusTracker
  • OpenCV常用函数以及使用场景
  • Qt开发:nativeEvent事件的使用
  • STM32-I2C通信外设
  • 2025最新群智能优化算法:海市蜃楼搜索优化(Mirage Search Optimization, MSO)算法求解23个经典函数测试集,MATLAB
  • TinyWebServer项目笔记——01 线程同步机制封装类
  • 模型微调——模型性能提升方法及注意事项(自用)
  • 【微知】Centos如何迁移到Anolis系统的失败记录?(yum -y install centos2anolis、centos2anolis.py)
  • 正版Windows10/11系统盘制作详细教程
  • 基于单片机及传感器的机器人设计与实现