数码相册—总结与归纳

  • 硬件平台:韦东山嵌入式Linxu开发板(S3C2440.v3)
  • 软件平台:运行于VMware Workstation 12 Player下UbuntuLTS16.04_x64 系统
  • 参考资料:《嵌入式Linux应用开发手册》、《嵌入式Linux应用开发手册第2版》
  • 开发环境:Linux 3.4.2内核、arm-linux-gcc 4.3.2工具链
  • 源码仓库:https://gitee.com/d_1254436976/Embedded-Linux-Phase-3

目录

  • 数码相册—总结与归纳
    • 一、框架梳理
      • 1、软件框架
      • 2、Makefile框架
    • 二、功能说明
      • 1、支持文件浏览
      • 2、支持图片的操作
    • 三、各页面效果图
    • 四、使用到的技术
      • 1、显存管理
      • 2、多线程管理
      • 3、网络编程
      • 4、libjpeg-turbo库
      • 5、FreeType库

一、框架梳理

1、软件框架

对于上述完成主要功能的7个部分:encoding编码部分、fonts获取字体点阵部分、display显示部分、input输入部分、debug调试部分、page页面管理部分、render渲染部分、file文件映射部分

  1. encoding编码部分去文件中获得编码信息,对于每个文件,保存的时候,系统对自动或手动的根据编码规范,对文件的信息进行编码:如保存为ASCII、GBK、UTF-8、UTF16LE、UTF16BE
  2. fonts获取字体点阵部分根据获得的编码信息得到字体数据(LCD上表示为点阵)
  3. display显示部分把字体数据(点阵)显示在LCD上
  4. input输入部分管理不同的输入方式,定制不同的输入方式所实现的控制,满足多种控制场合;
  5. debug调试部分设置打印等级和打印通道,通过打印等级控制程序打印的调试信息错误信息警告信息等,通过打印通道设置来控制程序打印的输出的流向标准输出还是网络打印输出
  6. page页面管理部分:负责对多种页面进行管理,通过触控进行不同页面的切换与功能实现
  7. render渲染部分:负责对bmp、jpg文件进行读取、解析、提取有效的像素信息、显示到LCD上
  8. file文件映射部分:负责对图片文件进行信息读取并进行内存映射,供render渲染部分来获取信息。

2、Makefile框架

二、功能说明

1、支持文件浏览

对开发板的根文件系统的进行文件扫描、读取其文件信息,并通过页面规划显示。
效果图:

2、支持图片的操作

  1. 支持bmp、jpg格式的图片显示、缩放、移动;
  2. 支持图片查看模式
  3. 支持指定目录、设置时间间隔进行图片连播模式

三、各页面效果图

  • main_page主页面
  • auto_page连播模式页面
  • browse_page文件浏览模式页面
  • manual_page图片查看模式页面
  • setting_page设置页面
  • interval_page设置时间间隔页面

四、使用到的技术

这里总结的是部分所使用到的技术,还有一些比较细致的技术就不作介绍。

1、显存管理

具体可以看【1.10 数码相册—main_page主界面的显存管理、页面规划、输入控制】
对于页面的显示LCD与Framebuffer之间通过LCD控制器来进行像素信息的传递,当我们需要显示图片时,只需要在Framebuffer中写入颜色信息就可以在LCD上显示出来。
应用程序过大,会导致显示的很慢,此时需要优化措施

  1. 在内存中开辟一个与Framebuffer大小相同的内存空间
  2. 提前把需要显示的内容写到新开辟的内存空间中
  3. 需要显示时,直接把新开辟的内存空间memcpyFramebuffer

2、多线程管理

具体可以看【1.7 数码相册—电子书(5)—多线程支持多输入】和【1.7 数码相册—电子书(6)—支持远程打印信息】
主线程:负责初始化各种设备,创建子线程,等待子线程的输入信息,处于休眠。

  • stdin输入子线程:负责响应stdin输入设备的输入事件的子线程,当发生输入事件时,主线程处于休眠状态,执行此线程的任务,执行完毕后则重新唤醒主线程。
  • touchscreen输入子线程:负责响应touchscreen输入设备的输入事件的子线程,当发生输入事件时,主线程处于休眠状态,执行此线程的任务,执行完毕后则重新唤醒主线程。

在这里采用的是UDP协议,让这个文件作为服务器端程序,即在开发板上运行的程序为服务器端,供局域网中的客户端连接进来。对于传输数据的存储,考虑到一开始没有客户端连接,所以设置了一个环形缓冲区来进行存储数据。
同时在这个文件中设置了两个子线程,发送线程与接收线程:

  • 发送线程:用来发送打印信息给客户端
  • 接收线程:用来接收控制信息,如修改打印级别、修改打印通道

3、网络编程

具体可以看【1.7 数码相册—电子书(6)—支持远程打印信息】
实现多线程支持多输出:标准输出与UDP网络打印输出
在这里采用的是UDP协议,让这个文件作为服务器端程序,即在开发板上运行的程序为服务器端,供局域网中的客户端连接进来。对于传输数据的存储,考虑到一开始没有客户端连接,所以设置了一个环形缓冲区来进行存储数据。同时在这个文件中设置了两个子线程,发送线程与接收线程:

  • 发送线程:用来发送打印信息给客户端
  • 接收线程:用来接收控制信息,如修改打印级别、修改打印通道

4、libjpeg-turbo库

具体可以看【1.8 数码相册—在LCD上显示JPG图片】
使用一些libjpeg-turbo库来对JPEG文件进行处理,解压出我们所需要的原始RGB数据。

5、FreeType库

具体可以看【1.4 数码相册—FreeType介绍】、【1.5 数码相册—使用FreeType在LCD上显示单个字符】和【1.6 数码相册—使用FreeType在LCD上显示多行文字】
使用FreeType字体引擎,产生高质量的输出(字形图像)。

第三阶段应用层——1.13 数码相册—梳理与总结相关推荐

  1. 第三阶段应用层——2.6 视频监控—CMOS摄像头的硬件原理

    视频监控-CMOS摄像头的硬件原理 硬件平台:韦东山嵌入式Linxu开发板(S3C2440.v3) 软件平台:运行于VMware Workstation 12 Player下UbuntuLTS16.0 ...

  2. 第三阶段应用层——2.7 视频监控—从零写CMOS摄像头驱动

    视频监控-从零写CMOS摄像头驱动 硬件平台:韦东山嵌入式Linxu开发板(S3C2440.v3),OV7740摄像头 软件平台:运行于VMware Workstation 12 Player下Ubu ...

  3. 第三阶段应用层——2.4 视频监控—从0写USB摄像头驱动(1)-描述符的分析与打印

    视频监控-从0写USB摄像头驱动(1)-描述符的分析与打印 硬件平台:韦东山嵌入式Linxu开发板(S3C2440.v3) 软件平台:运行于VMware Workstation 12 Player下U ...

  4. 中国石油大学(北京)-《计算机网络应用基础》第三阶段在线作业

    第三阶段在线作业 单选题 (共20道题) 收起 1.(2.5分) 以下关于VPN说法正确的是 A.VPN指的是用户自己租用线路,和公共网络物理上完全隔离的.安全的线路 B.VPN指的是用户通过公用网络 ...

  5. 中国石油大学《计算机应用基础#》第三阶段在线作业

    第三阶段在线作业 单选题 (共20道题) 收起 1.(2.5分) PowerPoint演示文稿的作者必须非常注意幻灯片集的两个要素是(). A.内容和设计 B.内容和模板 C.内容和视觉效果 D.问题 ...

  6. java 高并发第三阶段实战_JAVA多线程编程实战视频-第三阶段(共80节)

    高并发编程第三阶段01讲 AtomicInteger多线程下测试讲解 高并发编程第三阶段02讲 AtomicInteger API详解,以及CAS算法详细介绍 高并发编程第三阶段03讲 利用CAS构造 ...

  7. java 高并发第三阶段实战_Java 高并发第三阶段实战---Java并发包深入解析与使用详解...

    第三阶段的课程主要围绕着Java并发包的使用,展开详细的介绍,主要内容有1.原子包源码剖析,2.并发包工具类详细介绍,3.线程服务以及Future和callable等详细介绍,4.高并发容器和阻塞容器 ...

  8. WEB_面试题_第三阶段

    第三阶段面试题 一.JavaScript高级 1. 判断以下程序的输出结果: var age=100; function test(){ this.age=50; return function(){ ...

  9. Linux运维 第三阶段 (十八) varnish

    Linux运维 第三阶段 (十八) varnish 数据: 结构化数据,RDBMS: 非结构化数据,FS,存海量小文件,NAS.SAN.DFS可提供较好的性能: web cache: 程序具有局部性( ...

  10. (64)SPI外设驱动用户发送模块(三)(第13天)

    (64)SPI外设驱动用户发送模块(三)(第13天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)SPI外设驱动用户发送模块(三)(第13天) 5)技术交流 6 ...

最新文章

  1. spingmvc的一些简单理解和记录
  2. linux grep -v反向搜索:不显示目标字符串
  3. dockerfile构建nginx并结合php
  4. ubuntu16.04 python3.5 opencv的安装与卸载(转载)
  5. linux下docker安装步骤_linux下安装mysql8步骤
  6. 已知若干点求圆心_【求精干货】高中数学知识点总结归纳高一学生必须掌握
  7. Windows7,网络连接错误: 依赖服务或组无法启动
  8. 产品研发过程管理专题——软件工程(软件目的需求开发与管理)
  9. Extjs核心概念之Store
  10. spring注释_Spring注释
  11. 产品经理会用到的常用术语大全
  12. matlab 加上划线,latex 上划线
  13. 10月15日lol服务器维护,lol10月15日维护到几点 英雄联盟2020年10月15日10.21版本维护结束时间...
  14. 计算机网络原理 - 网络层、链路层总结笔记
  15. 信息系统项目管理师-业务流程管理知识点
  16. java并发-ReentrantReadWriteLock读写锁
  17. openGL平行光、点光、聚光
  18. python测试用例发送邮件用谷歌浏览器的方式
  19. Linux:查看系统版本号
  20. 孪生素数猜想,不值一提

热门文章

  1. Java Instrument(一) Java Agent
  2. Java实现 蓝桥杯VIP 算法提高 格子位置
  3. sl4a库_SL4A客户端Python服务器(SL4A client Python server)
  4. 【故事编程:Lambda表达式】之最甜的巧克力(二)
  5. oracle vm 强制关机,[已解决]Virtualbox安装archlinux过程中客户机和宿主机全部卡死...
  6. 自定义chromium浏览器
  7. SpringBoot集成Elasticsearch 进阶,实现中文、拼音分词,繁简体转换高级搜索
  8. CTF线下攻防赛总结
  9. java源文件在哪_java源文件由什么组成?
  10. 常见的输入、输出、存储设备