电子书 + 数码相框(入门项目)
文章平均质量分 66
练手的两个小项目,主要掌握“面向对象编程” + “软件框架搭建”两大核心。还可对jpeglib、freetype、bmp解析有一定了解。是从0搭建项目的完整过程诠释。
ZMK_02
talk is cheap, show me your code!
展开
-
推送电子书项目到GitHub:入门Git后的练手
一、本文目标搞IT的,应该无人不知晓“GitHub”, 因此将项目代码托付给GitHub网站管理再合适不过了。(备注:GitHub只是个网站,而Git才是管理代码的(Git——“分布式版本控制系统”) )将电子书项目推送到Github网站,方便后面电子书项目的更新,也方便大家下载学习交流。为啥不推送“数码相框”那个项目呢?因为这个推送只是作为我Git初学者的练手项目,后面再推送数码相框到GitHub。(如果你懂Git基本操作,但没实战过,那这篇文章很适合你。如果你是个GIt高手,请绕道,给小白留原创 2020-06-01 14:30:18 · 620 阅读 · 0 评论 -
数码相框实现五:图片的手动播放
数码相框实现五:图片的手动播放一、本文目标二、手动播放页面显示三、实现放大、缩小、连播等功能一、本文目标本文实现数码相框的最后一个功能:图片的手动播放具体操作:浏览模式-->点击某张图片(支持jpg\bmp)-->显示图片(可放大、缩小、连播、图片移动)显示效果如下图:如何实现呢?依然两步走:1)页面显示(包括菜单图标 + 图片) 2)功能实现(放大、缩小、连播等)下面按这两步依次讲解。二、手动播放页面显示对于手动播放页面坐标计算,看下图(备注:菜单图标坐标对称的,很简单原创 2020-05-28 10:03:07 · 665 阅读 · 0 评论 -
数码相框实现四:实现图片的连播模式
数码相框实现四:实现图片的连播模式一、目标与思路二、源码实现与效果图2.1 整体实现的搭建2.2 获得时间间隔和播放目录2.3 准备下一张图片2.4 递归获得目录下文件名2.5 效果图展示一、目标与思路有了前面浏览页面的显示和功能实现,“连播模式”就可完成了。本文目标:实现图片的连播-->连播模式:如果没有设置,则默认从根目录/递归显示所有的图片(bmp和jpg格式)。 否则,如果设置了播放的“时间间隔” 和 选择的“播放目录”, 就会按设置的时间间隔递归连续显示那个目录下的所有图片。原创 2020-05-25 21:08:41 · 791 阅读 · 0 评论 -
数码相框实现三:浏览页面显示及功能实现
一、本文内容概述在前文时间间隔设置页面显示基础上,继续完善,实现点击设置页面的“选择目录”图标按钮,显示如下“浏览”页面。然后接着实现浏览页面的四个菜单功能。四个菜单的功能介绍:1.向上:返回上一目录,如果在顶层目录,则返回到“设置页面”2.选择:选中某一目录作为主页面里“连播模式”的播放对象3.上一页:返回上层目录,如果在顶层目录,并不返回4. 下一页:进入下一层目录,如果下一层目录不存在,点击没有反应。补充:显示的目录和文件在根文件系统上。下面,分为两部分讲解: 浏览页面显示 +原创 2020-05-24 23:17:04 · 548 阅读 · 0 评论 -
数码相框实现二、显示设置页面、时间间隔设置页面
数码相框实现二、显示设置页面、时间间隔设置页面一、写在前面二、本文内容概述三、显示设置页面四、显示时间间隔设置页面五、实现加减时间间隔六、全文总结一、写在前面突然发现,如何先把思路讲清,然后再贴出一堆代码。这种分离式的讲解不仅难以将代码与原理联系在一起,更重要的是后面贴出的一段代码实在枯涩难懂(一没注释,二代码太长)。因此,个人看法,应该一文按实现顺序拆分为几部分,每一部分将思路与代码实现结合起来,且第一部分应提出本文目标,结尾部分再捋一下全篇思路,做出总结。此外,如有参考资料或辅助资料放在最后原创 2020-05-21 21:19:30 · 588 阅读 · 0 评论 -
数码相框实现一、显示主界面
一、理清思路, 比啥都重要因为数码相框是在电子书的基础上实现的,因此会继续继承电子书的框架。即显示主界面和其它界面合为一个子模块,也需向上注册该模块。对于显示主界面,本文目标如下图:实现显示主界面分三步走1)按电子书子模块实现的老套路,搭建子模块的框架2)显示主界面的逻辑3)获得触摸屏输入事件的逻辑1)主界面显示的子模块框架图,如下这部分代码最好写了,只是添加一个子模块。套路跟之前编写电子书子模块一样。因此,这里不再赘述,重点在下面的如何显示主界面2)显示主界面逻辑图,如下原创 2020-05-19 23:02:31 · 883 阅读 · 0 评论 -
数码相框的准备——显示并缩放bmp图片
一、写在前面后续的文章将会在电子书的基础上实现一个数码相框。在讲解框架之前,先讲解如何在LCD上显示bmp图片并支持缩放。另外,后面在讲完一个知识点后便贴出源码实现,加深理解。对于在LCD显示bmp位图,分三步:1)解析BMP文件,获得位图数据2)缩放图片3)合并图片二、BMP图片格式解析与源码实现1)理解BMP图片格式2)编程解析BMP的注意点3)源码实现static int CovertOneLine(int iWidth, int iSrcBpp, int iDstBpp原创 2020-05-18 22:11:28 · 826 阅读 · 0 评论 -
电子书完善三:支持网络打印
电子书完善三:支持网络打印一、添加debug(输出)子模块二、环形缓冲区 + 多线程三、源码实现3.0 debug_manager.h3.1 debug_manager.c3.2 stdout.c3.2 net_print.c四、调试遇到的坑(bug)一、添加debug(输出)子模块二、环形缓冲区 + 多线程debug子模块用到了环形缓冲区 + 多线程,因为前面讲解多线程并没细讲,这里补充说明一些。1.环形缓冲区2. 多线程用 “互斥锁” 实现多线程见互斥访问临界资源(公共资源), 用“条原创 2020-05-17 16:59:36 · 858 阅读 · 2 评论 -
电子书完善二:多种方式(轮询/select/多线程)实现多输入(终端和触摸屏)
一、轮询方式#include <input_manager.h>#include <config.h>#include <string.h> // strcmp/* g_ptInputOprHead 全局链表头指针 */static PT_InputOpr g_ptInputOprHead;int RegisterInputOpr(PT_InputOpr ptInputOpr){ PT_InputOpr ptTmp; if(!g_ptI原创 2020-05-15 22:20:38 · 473 阅读 · 0 评论 -
电子书完善一:编写通用Makefile
一、写在前面对于前面电子书的Makefile文件,只是简单地列出所有编译所需的目标文件,但是当修改某个头文件时并不会重编译包含该头文件的源文件。另一方面,当存在成千上万个源文件,这样一 一列出xxx.o是不现实的。因此很有必要写出一个更通用的编译体系。二、电子书的源码树./|-- display| |-- disp_manager.c| |-- fb.c| |-- Makefile| `-- test| |-- Makefile| `-- t原创 2020-05-14 14:40:07 · 366 阅读 · 0 评论 -
电子书编译、测试与总结
一、编译与测试编译: make竟然这么顺利?拿到开发板运行下打脸了,一来就是段错误 : (原创 2020-05-13 16:37:54 · 313 阅读 · 0 评论 -
电子书——main.c + draw.c(核心)
一、main.c 与 draw.c 介绍二、main.c 与 draw.c源码实现mai'n.c#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <config.h>#include <draw.h>#include <encoding_manager.h>#include <fonts_manager.h>#include原创 2020-05-12 14:04:54 · 453 阅读 · 0 评论 -
电子书---编码子模块
一、关于window下的一些编码常识对于一个文本文件,可保存为ANSI、UTF-8、UTF-16 LE、UTF-16BE及 带有BOM的UTF-81)先说说啥是BOM?BOM,是Byte Order Mark 的缩写,就是字节序标记。2)UTF-8 的 编码规则在前面文字提到如何解读UTF-8, 这里再回顾并补充一些。UTF-8 是 遵从 unicode 标准的(也就是是说,UTF-8表示的字符编码在unicode编码表中)但是,UTF-8 是变长(1~4字节)编码的,如何实现变长呢?还是原创 2020-05-11 20:33:54 · 577 阅读 · 0 评论 -
电子书---点阵子模块
一、点阵子模块介绍1) 点阵子模块的文件组成:|--------fonts|--------------fonts_manager.c|--------------ascii_font.c|--------------gbk_font.c|--------------freetype_cont.c|-------include|-------------fonts_manager.h|-------------config.h2) 点阵子模块框架图注解: 点阵子模块与显示子模块,原创 2020-05-10 15:51:17 · 435 阅读 · 0 评论 -
电子书---显示子模块
电子书---显示子模块一、显示子模块介绍二、显示子模块代码实现一、显示子模块介绍本文要实现display文件夹下的两个文件: fb.c disp_manager.c, 以及include文件夹下的 disp_manager.h、config.h他们之间的关系如下图所示二、显示子模块代码实现config.h#ifndef _CONFIG_H#define _CONFIG_H// #define DBG_PRINTF(...) // 取消打印#define DBG_PRINTF原创 2020-05-09 13:47:27 · 463 阅读 · 0 评论 -
电子书的框架与实现安排
电子书的框架与实现安排一、写在前面二、电子书的框架三、电子书实现安排一、写在前面原本,本文计划使用 libjpeg 库在LCD显示一张jpg图片,但是突然发现前面两篇博文的储备+前面LCD驱动 已经能够写出一个电子书,即打开不同编码的文件在LCD显示(当然后期可在控制台显示)。这个项目实现不难,但这个项目的框架值得学习,以及从这个项目学会如何规范编码?如何写多级目录的Makefile?源码如何组织?等等这些值得我们学习,因此,下面讲解这个项目总体框架,然后实现这个项目分为几篇博文讲解,即如何实现这原创 2020-05-08 17:35:58 · 449 阅读 · 0 评论 -
[电子书]项目储备二:用FreeType2绘制矢量字体、多行文字
0 矢量字体 VS 点阵字体点阵字体:每一个字符都用点阵(8x8 / 8x16/ 16x16等)表示,然后用每个点的虚实来表示字符的轮廓矢量字体:矢量字体(Vector font)中每一个字形是通过数学曲线来描述的,它包含了字形边界上的关键点,连线的导数信息等,字体的渲染引擎(如FreeType2)通过读取这些数学矢量,然后进行一定的数学运算来进行渲染。矢量字体主要包括 Type1、 Tr...原创 2020-05-07 21:56:32 · 1158 阅读 · 1 评论 -
[电子书]项目储备一: 字符编码与LCD显示单个字母/汉字
1 字符编码对于字符编码,网上一堆好文章,写得更详细。这里只是提及一些关键点。字符编码的发展历程概括为: ASCII码--> 各国/地区独立编码(如GB2312/GBK、BIG5等)--->统一编码:unicode码 在面对同一字符可有不同编码,或者同一编码值可解码为不同字符,为统一编码,出现了unicode码,值得注意的是,unicode码只是给出了每个字符对应的编码值,...原创 2020-05-06 14:23:10 · 864 阅读 · 0 评论