当前位置:   article > 正文

12、数码相框编写程序之效果演示与代码讲解_数码相框项目怎么写

数码相框项目怎么写

上一节:11、数码相框编写程序之MainPage显存管理与页面规划

下一节:13、数码相框编写程序之支持中文和课后作业

1、编译方法

1. 交叉编译安装freetype
tar xjf freetype-2.4.10.tar.bz2 
./configure --host=arm-linux
make
make DESTDIR=$PWD/tmp install

编译出来的头文件应该放入:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include

把tmp/usr/local/include/*  复制到 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
cp * /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include -rf
cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
mv freetype2/freetype .

编译出来的库文件应该放入:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib

把tmp/usr/local/lib/*  复制到 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
sudo cp * /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib -d -rf

//放到根文件系统
cp *so* /work/nfs_root/fs_mini_mdev_new/lib -d

2. 交叉编译安装libjpeg (如果工具链中已经有libjpeg库,这步可省;否则参考前面笔记)

3. 把freetype库, libjpeg库放到根文件系统上去
//放到根文件系统
进入freetype的tmp/usr/local/lib
cp *so* /work/nfs_root/fs_mini_mdev_new/lib -d

4. 交叉编译安装tslib库
修改:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include/linux/input.h
#define EV_VERSION       0x010000
改为
#define EV_VERSION		0x010001

然后:参考<tslib编译使用方法.txt>

5. 准备运行:
a. 从windows 得到矢量字体文件MSYH.TTF, 把它放入fs_mini_mdev_new
b. 在根文件系统上建 /etc/digitpic 目录
   把icons复制进去
c. insmod s3c_ts.ko
d. 
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
e. ts_calibrate
f. ./digitpic /MSYH.TTF
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

2、运行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、完整代码讲解

在刚开始讲数码相框项目的时候,我们录制了 8.1 节的视频,里面讲解了程序的框架现在代码已经全部写完,框架并没有大的变
化。

整体框架:
在这里插入图片描述
辅助模块:调试 文件操作
在这里插入图片描述
显示设备模块:
在这里插入图片描述
编码模块:
在这里插入图片描述
输入模块:
在这里插入图片描述
字库点阵模块:ascii.c、gbk.c 都是在电子书里面用到的,数码相框没有用到这两个
在这里插入图片描述
图片解析模块:
在这里插入图片描述
页面模块:
在这里插入图片描述
页面:
在这里插入图片描述
代码见:第 1 个项目数码相框全部源码_图片_文档\源码(含讲课过程中即时编写的文档)\12.数码相框项目\14.digital_photo_frame_8.5.5_5 数相框程序最终版支持中文\digital_photo_frame_8.5.5_5

整体页面如下:
在这里插入图片描述
一上电运行main_page页面:
在这里插入图片描述
main_page页面中点击浏览模式进入:
在这里插入图片描述
main_page页面中选择某个图片进入:
在这里插入图片描述
main_page页面中点击联播模式将进入:
在这里插入图片描述
main_page页面中点击设置将进入:
在这里插入图片描述
设置页面中点击选择目录将进入:
在这里插入图片描述
设置页面中点击设置间隔将进入:
在这里插入图片描述

1、main函数先进行DebugInit()注册调试模块

在这里插入图片描述
以后使用打印的话,都是调用debug_manager.c中注册上来的函数。

其中netprint.cstdout.c中就是以面向对象的思想注册一个结构体:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样我们以后调用debug_manager.c中的NetDbgPrint函数时就会调用到下一层netprint.cstdout.c中的函数:
在这里插入图片描述
在这里插入图片描述

2、注册调试模块之后初始化调试通道

在这里插入图片描述
在这里插入图片描述
在这里会把挂载到链表g_ptDebugOprHead中的所有调试通道取出来,使用它们的DebugInit函数进行初始化。
在这里插入图片描述

3、注册显示设备

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个函数里也是调用下层的各个显示设备的初始化函数进行初始化,这里我们只有FB设备。

选择默认的显示设备,这里我们只有FB设备。
在这里插入图片描述

4、为显示页面预先分配缓存

为加快显示速度,我们事先在内存中构造好显示的页面的数据:
在这里插入图片描述

5、初始化输入设备

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
有标准输入和屏幕输入两种,这里我们只是用屏幕输入。
其中屏幕输入的初始化也是下层注册某个结构体到某个链表上。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
调用所有注册到上述链表上的输入设备的初始化函数:
在这里插入图片描述

6、注册编码模块

在这里插入图片描述
在这里插入图片描述

7、注册字库模块

字库点阵模块:ascii.c gbk.c 都是在电子书里面用到的,数码相框没有用到这两个
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
设置设置freetype字库所用的文件和字体尺寸:
在这里插入图片描述

8、注册图片解析模块

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
里面有BMP格式、JPG格式的初始化函数。

9、注册页面

在这里插入图片描述
在这里插入图片描述
里面有6个页面的注册函数,每一个都是以面向对象的思想向上一层注册了一个结构体。
在这里插入图片描述

10、运行

各种初始化完之后,调用page_manager.c中的Page("main")->Run(NULL);函数:
在这里插入图片描述
运行主页面:
在这里插入图片描述
会从g_ptPageActionHead这个链表中找到main_page之前注册的PT_PageAction结构体:
在这里插入图片描述
运行里面的Run函数:
在这里插入图片描述

1、显示页面

在这里插入图片描述
ShowMainPage函数中:
在这里插入图片描述
1、获得显存
在这里插入图片描述
调用到了disp_manager.c里的文件
在这里插入图片描述
2、描画数据
使用GeneratePage函数生成页面数据:
在这里插入图片描述
在这里插入图片描述
其中使用GetPixelDatasForIcon函数取得图标文件的象素数据:
在这里插入图片描述
其中图标存在 /etc/digitpic/icons中,使用file.c中的函数进行操作:
在这里插入图片描述
这里使用到render.c中的文件:
在这里插入图片描述
打开文件之后调用picfmt_manager.c中的Parser函数:
得到bmp.c的结构体,调用里面的函数来解析出bmp文件的像素数据:
在这里插入图片描述
提取到图片数据之后进行缩放和合并操作:
在这里插入图片描述
3、生成页面之后把缓存里的数据刷到设备上去
在这里插入图片描述
在这里插入图片描述
4、解放显存
在这里插入图片描述
用完之后解放显存
在这里插入图片描述

2、获得输入

在这里插入图片描述
最终会调用到input_manager.c中的:
在这里插入图片描述
在这里插入图片描述
得到输入数据之后判断触点在哪里?
在这里插入图片描述

3、循环运行程序

在这里插入图片描述

11、主页运行浏览模式

在这里插入图片描述
显示页面ShowBrowsePage函数:
在这里插入图片描述
里面有:生成浏览模式里面的目录和文件
在这里插入图片描述
在这里插入图片描述
就是显示目录和文字。
函数GenerateBrowsePageDirAndFile里面,设置字体大小:
在这里插入图片描述
显示目录或文件的名字:
在这里插入图片描述
MergerStringToCenterOfRectangleInVideoMem函数里面,获得编码:这就用到了encoding.c里面的函数:
在这里插入图片描述
在这里插入图片描述
获得位图:这就用到了font.c里面的函数
在这里插入图片描述
在这里插入图片描述
层次如下图:
在这里插入图片描述
上一节:11、数码相框编写程序之MainPage显存管理与页面规划

下一节:13、数码相框编写程序之支持中文和课后作业

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/263402
推荐阅读
相关标签
  

闽ICP备14008679号