已经过了一周多了没动这个了,先发布文章吧,最近进入项目组,可能时间不大多,以后慢慢改。
或许可以近期将一些这里研究过的东西写些感受放上来
目标:
1.可以显示不同编码的汉字,可自行更换字体,更改字体大小
2. 不同方式显示,例如,横版,竖版,双屏等等
3.多种控制方式
4.良好的界面,足够的速度,文件大小回避等。
5.支持压缩文件
达成:
1.使用freetype2库,可以打印Unicode汉字,使用ttf字体,可更改字体大小
2.可以实现GBK的打印
3.简单排版
4.读取配置文件
5.显示速度
6.字型灰度表示
7.简单的自动排版
8.简单的按键控制
9.1bit的位图的显示
10.自动判断几种编码方式,Unicode,UnicodeBigEnd,GBK(兼容GB2312,兼容ANSI)。
11.文件列表,及文件选择
12.简单的键盘,笔操作实现
短期目标:
1.各种操作的结合行
2.文件列表的缓冲显示
3.书签
4.常用字符点阵缓存功能
5.支持压缩文件,至少要zip
6.看能否实现最大程度的编码范围,比如使用iconv库来实现
log:
2008
2月
16日:决定自己做一款阅读器,开始搜集资料
17:安装devkitpro以及palib,hellowold成功
18:尝试读取文本,读取文本成功,直接打印英文成功,中文失败
19:研究点阵字库打印
20:GBK字库打印失败,GB2312打印成功
21:使用各种方式尝试使用GBK字库(system.fon),失败。PS,这个fon字体是不是有问题啊。。。
22:放弃点阵字库,发现开源freetype库,简单研究,发现freetype for nds,还是先thanks一下 Robots w/lasers http://blog.davr.org/
23:简单查看文档,根据demo编制程序,编译失败
24:freetype2古怪的include编译器不支持,更改其为普通的include方式,编译成功,使用fat.h for nds(应该是有更改流方式的作用),字体读取成功。未有显示结果,研究palib bitmap处理,果然,是颜色未定义。汉字打印失败,英文成功。考虑编码问题,果然是编码问题,使用unicode编码文字替代原有文字,打印成功。开心,终于完成了一个目标。
25:荒废了一日,基本。无论怎么include,都提示各种输入方式的wchar方式未定义
26:继续尝试各种widechar方式,无奈没有一种可以成功。放弃,改为直接读取char,然后将char类型转换成wchar_t类型,基本成功。
27:发现windows下字体全是unicode,故想用windows的字体直接使用GBK编码文件是不可能的,唯一的方法是写出转换函数,将GBK(或者GB2312,GBK向下兼容)编码转换成unicode编码,也就是windows采用的codepage方式,nds估计没有codepage,自己编一个。从gbk编码表中提取了GB2312编码表,实现转换。
28:利用stlmap,实现gbk编码查找,速度的问题暂时不知道,等有空去nds上实际测试一下。测试效果,不如人意。速度慢,效果差。。。进行了简单的排版试验
29:字体调整中,实在是受不了那个难看的效果了,想到两种方法,一种将各种灰度表现出来,二,看能否转换成单色(这个bitmap可能会小)。采用第一种方法成功,r=g=b为各种灰度。速度问题,读字体的时候,是非常慢的。看来只有先将要显示的读出来的办法了,不然确实很慢。不过,有个关键在于,看书的时候,看完一页需要时间,这个时间用来缓存应该是足够的。搞定。发现一个libiconv可以转换编码,应该会有所帮助吧,但是我这周的主要工作就没了。。。。看见说simsun字体在小字号下使用嵌入式bitmap,1bit,我忘记考虑这个了,怪不得。应该要做进去,可以自动判断得到FTbitmap的类型。不过我找到一种load方式,FT_LOAD_NO_BITMAP,不使用嵌入的字体。算是一个偷懒的方法吧。对于字体,我简单将其居中,继续偷懒。。。
3.1:简单实现了自动排版。今天,从字体解脱吧。开始选择文件!实现了简单的按键控制,可以简单的翻页了,但是速度很不理想,主要是需要缓冲很长时间。需要开始考虑FT_CACHE的问题,也许会有所帮助。
3.2:搞定了1bit bitmap和gray bitmap之间的显示,都是抄的代码-_-!。实现了编码自动判断,这个有了就比较方便了,其实早就编好了,只是今天去将最后的判断代码编写一下if..else if..else... :-)调整灰度函数,现在显示效果还不错了。使用点阵字库显示文件列表,不过16点阵看起来有些大啊,找找12点阵的看
3.3:汉字常用的字符频率:最常用的140个字符占50%,常用的1000个汉字占90%的应用,所以,汉字cache的作用应该会是相当明显的。不过,cache就要写数据了,模拟器好像还不能。最好是针对字体的字号进行cache。为了减少开发复杂性,我决定将目录结构定死。因为,需要将txt文件放到指定的目录是一件可以接受的复杂度事件,但却我需要为这件事搞很多时间。但是我又想到,不支持目录的话,就会不方便管理书籍,这点比较麻烦。所有txt都放在一个目录下的话,似乎不好。不管怎么说,先做好了反色显示选择条目的功能,代码应该可以有很多改进,因为我复制了N回,多综合一下复用情况,应该可以改进。
3.4:实现了文件列表,以及浏览选择功能。现在还差书签功能,以及几个功能之间的调整和结合问题了,比如文件列表显示不全,显示了文本以后的输入问题,等等。然后除开主要功能就是性能方面的cache了。写了个半角全角的显示。今天好困啊,不想做事。
3.5:研究研究zip文件
3.6:已经荒废了两天,算上今天就是3天。不过还是比较慵懒。重新设计一下类吧。