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  -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,译音八分贝,道友,下期见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/983647.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【前端】webstorm创建一个导航页面:HTML、CSS 和 JavaScript 的结合

文章目录 前言一、项目结构二、HTML 结构三、CSS 样式四、JavaScript 功能五、现代化风格优化htmlcssjavascript运行效果 总结 前言 在现代网页开发中&#xff0c;一个良好的导航栏是提升用户体验的重要组成部分。在这篇文章中&#xff0c;我将向您展示如何创建一个简单而完整…

licheepi nano usb RNDIS连接外网方法及使用

文章目录 前言一、准备操作二、链接外网步骤1.安装g_ether驱动2.修改ip3.连接外网4.进一步配置DNS5.使用外网&#xff08;debian系统&#xff09;6.licheepi nano镜像源选择&#xff08;debian系统&#xff09; 总结 前言 前序内容使用licheepi nano 连接到了PC&#xff0c;可…

视频理解开山之作 “双流网络”

1 论文核心信息 1.1核心问题 任务&#xff1a;如何利用深度学习方法进行视频中的动作识别&#xff08;Action Recognition&#xff09;。挑战&#xff1a; 视频包含时空信息&#xff0c;既需要捕捉静态外观特征&#xff08;Spatial Information&#xff09;&#xff0c;也需要…

ARMv8寄存器的介绍

一、寄存器的作用 寄存器是CPU的内部组成单元&#xff0c;是CPU运算时取指令和数据最快的地方。它可以用来暂存指令、数据和地址。在CPU的控制部件中&#xff0c;包含的寄存器有指令寄存器&#xff08;IR&#xff09;和程序计数器&#xff08;PC&#xff09;。CPU的算术逻辑部…

步进电机软件细分算法解析与实践指南

1. 步进电机细分技术概述 步进电机是一种将电脉冲信号转换为角位移的执行机构&#xff0c;其基本运动单位为步距角。传统步进电机的步距角通常为 1.8&#xff08;对应 200 步 / 转&#xff09;&#xff0c;但在高精度定位场景下&#xff0c;这种分辨率已无法满足需求。细分技术…

【AD】5-12 Object元素的隐藏与显示

1.CtrlD进入Object显示界面&#xff0c;进行显示或隐藏

【 <一> 炼丹初探:JavaWeb 的起源与基础】之 Servlet 过滤器:实现请求的预处理与后处理

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、过滤器&…

Linux16-数据库、HTML

数据库&#xff1a; 数据存储&#xff1a; 变量、数组、链表-------------》内存 &#xff1a;程序运行结束、掉电数据丢失 文件 &#xff1a; 外存&#xff1a;程序运行结束、掉电数据不丢失 数据库&#xff1a; …

uniapp实现的个人中心页面(仿小红书)

采用 uniapp 实现的一款仿小红书个人中心页面模板&#xff0c;支持vue2、vue3, 同时适配H5、小程序等多端多应用。 简约美观大方 可到插件市场下载尝试&#xff1a; https://ext.dcloud.net.cn/plugin?id22516 示例

【运维篇】KubeSphere-02(经验汇总)

一、使用建议 1.对于数据库、对像存储比较重的要不能丢失&#xff0c;有异地存储备份需求的有状态服务&#xff0c;不建议采用k8s进行部署&#xff0c;会导致运维难度更大。 2.对于中间件如redis、MQ、harbor、seata、nacos、zookeeper可采用k8s部署。 3.对于无状态服务tomc…

基于单片机及传感器的机器人设计与实现

摘要 : 本设计基于单片机及多种传感器 , 完成了一个自主式移动机器人的制作。单片机作为系统检测和控制的核心 , 实现对机器人小车的智能控制。反射式红外光电传感器检测引导线, 使机器人沿轨道自主行走 ; 使用霍尔集成片 , 通过计车轮转过的圈数完成机器人行走路程测量; …

SQLiteStudio:一款免费跨平台的SQLite管理工具

SQLiteStudio 是一款专门用于管理和操作 SQLite 数据库的免费工具。它提供直观的图形化界面&#xff0c;简化了数据库的创建、编辑、查询和维护&#xff0c;适合数据库开发者和数据分析师使用。 功能特性 SQLiteStudio 提供的主要功能包括&#xff1a; 免费开源&#xff0c;可…

SpringBoot过滤器(Filter)的使用:Filter接口、FilterRegistrationBean类配置、@WebFilter注释

1、过滤器(Filter)的介绍 Spring Boot 的过滤器用于对数据进行过滤处理。通过 Spring Boot 的过滤器,程序开发人员不仅可以对用户通过 URL 地址发送的请求进行过滤处理(例如:过滤一些错误的请求或者请求中的敏感词等),而且可以对服务器返回的数据进行过滤处理(例如:压…

第11章 web应用程序安全(网络安全防御实战--蓝军武器库)

网络安全防御实战--蓝军武器库是2020年出版的&#xff0c;已经过去3年时间了&#xff0c;最近利用闲暇时间&#xff0c;抓紧吸收&#xff0c;总的来说&#xff0c;第11章开始学习利用web应用程序安全&#xff0c;主要讲信息收集、dns以及burpsuite&#xff0c;现在的资产测绘也…

PQL查询和监控各类中间件

1 prometheus的PQL查询 1.1 Metrics数据介绍 prometheus监控中采集过来的数据统一称为Metrics数据&#xff0c;其并不是代表具体的数据格式&#xff0c;而是一种统计度量计算单位当需要为某个系统或者某个服务做监控时&#xff0c;就需要使用到 metrics prometheus支持的met…

23年以后版本pycharm找不到conda可执行文件解决办法

这个问题很痛苦&#xff0c;折磨了我半天。 就是链接远程服务器的时候 就一直以为这三个都要配置 就这个conda环境这里怎么都找不到服务器的虚拟环境的python可执行文件&#xff0c;非常痛苦。 后面查找了资料&#xff0c;找了好久&#xff0c;才发现&#xff0c;原来只需要配…

后智能体时代的LLM和Agent

文章目录 1. 关于AI重塑的哲学体系2. 关于AI大模型体系的认知3. 关于AI大模型体系的畅想4. 关于人和AI大模型体系的共处5. 写在最后 随着OpenAI、Deepseek、Manus等等智能体的爆火&#xff0c;人们茶前饭后、插科打诨的话题都离不开这些智能体&#xff0c;现状也正如《人民日报…

QTreeWidget指定子节点弹出菜单

方法&#xff1a;判断父对象 connect(ui->treeWidget_nav, &QTreeWidget::itemChanged, [](QTreeWidgetItem *TWI){if (TWI->parent() TWI_bookmark) {qDebug() << TWI->data(0, LOCATION_OF_REAL_PATH).toString() << TWI->text(0);} }); ui->…

R语言使用scitable包交互效应深度挖掘一个陌生数据库

很多新手刚才是总是觉得自己没什么可以写的&#xff0c;自己不知道选什么题材进行分析&#xff0c;使用scitable包后这个完全不用担心&#xff0c;选题多到你只会担心你写不完&#xff0c;写得不够快。 今天演示一下使用scitable包深度挖掘一个陌生数据库 先导入R包和数据 li…

神经网络|(十五)|霍普菲尔德神经网络-Storkey 训练

【1】引言 前序学习进程中&#xff0c;对霍普菲尔德神经网络有了初步认识&#xff0c;使用Hebbian方法测试了霍普菲尔德神经网络算法。相关学习文章链接为&#xff1a; 神经网络|(十四)|霍普菲尔德神经网络-CSDN博客 在此基础上&#xff0c;尝试探索使用Storkey方法对霍普菲…