当前位置: 首页 > 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,译音八分贝,道友,下期见!

相关文章:

  • 关于无感方波启动预定位阶段
  • 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(一):循环神经网络的核心计算机制
  • 企业网站内容是什么/seo关键词优化排名公司
  • 哪里学网站开发/河南百度推广代理商
  • 做网站服务器软件/如何宣传网站
  • 做视频网站服务器要求吗/外链互换平台
  • 承德 网站维护/百度云电脑网页版入口
  • 嘉兴手机网站开发费用/中国十大公关公司排名