打印
[i.MX]

请教lcd上如何显示中文

[复制链接]
2302|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yousuozi|  楼主 | 2014-4-29 17:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
lqland| | 2014-4-29 20:19 | 只看该作者
帮顶,Mark

使用特权

评论回复
板凳
秀色可餐| | 2014-4-30 16:02 | 只看该作者
是什么样的LCD?字符阵型  还是 TFT?

使用特权

评论回复
地板
yousuozi|  楼主 | 2014-4-30 16:34 | 只看该作者
秀色可餐 发表于 2014-4-30 16:02
是什么样的LCD?字符阵型  还是 TFT?

tft的 320x240

使用特权

评论回复
5
uwyyk28| | 2014-5-2 09:35 | 只看该作者
实现LCD上显示汉字,你可以下载个HZK16的文件,应用程序的main函数中open这个HZK16的汉字库,然后fstat获得这个汉字库的大小,接下来mmap出这个汉字库的一个内存地址,最后就是按照GB2312的标准实现一个函数(比如:lcdDisplayChinese)把中文字显示到TFT的LCD上。注:HZK16是符合GB2312的。

使用特权

评论回复
6
uwyyk28| | 2014-5-2 09:38 | 只看该作者
你也可以用Freetype来实现中文显示,到freetype官网下载个源码,官网上也有documentations,说明如何使用freetype,我个人认为freetype更灵活一些。

使用特权

评论回复
7
yousuozi|  楼主 | 2014-5-4 20:01 | 只看该作者
uwyyk28 发表于 2014-5-2 09:35
实现LCD上显示汉字,你可以下载个HZK16的文件,应用程序的main函数中open这个HZK16的汉字库,然后fstat获得 ...

哦哦 这就是在应用程序中lcd显示汉字把~

我已经实现了虚拟终端中文的显示 驱动源码里改了video/console下有关vt和fb的很多地方 还添加了cjk字库 现在lcd上可以显示中文输出信息了~
我现在就是不太清楚我这种改法和用freetype,还有qt移植中文字库有什么区别??实现的目的是一样的么??

还有应用程序中该如何在指定坐标位置显示汉字呢 用您刚说的那种方法么? 我在驱动中已经加入了cjk字库了 是不是就可以不用下载那个HZK16了哇??
请赐教 谢谢拉

使用特权

评论回复
8
uwyyk28| | 2014-5-5 09:23 | 只看该作者
yousuozi 发表于 2014-5-4 20:01
哦哦 这就是在应用程序中lcd显示汉字把~

我已经实现了虚拟终端中文的显示 驱动源码里改了video/console ...

问题1:
我已经实现了虚拟终端中文的显示 驱动源码里改了video/console下有关vt和fb的很多地方 还添加了cjk字库 现在lcd上可以显示中文输出信息了~
我现在就是不太清楚我这种改法和用freetype,还有qt移植中文字库有什么区别??实现的目的是一样的么??

答:
实现的方法有很多种,你做的也是其中一种方法,可以的。

问题2:我在驱动中已经加入了cjk字库了 是不是就可以不用下载那个HZK16了哇??
答:如果你在内核驱动中加入了cjk字库,并且这个字库符合你的要求,那就不用HZK16了。但是,建议你最好不要在内核驱动里添加字库,这样会增加内核的体积,毕竟内核驱动是提供机制,不提供策略,所以最好把策略的东西放到应用层去做,汉字库也是,在应用层open,然后mmap映射一个地址来操作,这样既不增加内核体积,也达到了目的。

问题3:应用程序中该如何在指定坐标位置显示汉字呢 用您刚说的那种方法么?
答:如果你使用freetype的话,在LCD的任意位置显示汉字都是很容易的。具体实现的步骤,你可以从freetype官网下载doc文件,我下载的时候是freetype-doc-2.5.3,在freetype-doc-2.5.3\freetype-2.5.3\docs\tutorial中,有step1,2,3三篇tutorial**,写的很不错,还有c语言的example1.c做为参考,基本上你想要的答案,确定坐标系这里边都有。从头到尾看完的话,用freetype实现汉字还是很容易的。

祝好运。

使用特权

评论回复
9
yousuozi|  楼主 | 2014-5-5 13:24 | 只看该作者
uwyyk28 发表于 2014-5-5 09:23
问题1:
我已经实现了虚拟终端中文的显示 驱动源码里改了video/console下有关vt和fb的很多地方 还添加了c ...

哦哦 这这个样子哇 我去做试试~~
解答的很详细 非常感谢~~~~

使用特权

评论回复
10
yousuozi|  楼主 | 2014-5-5 13:30 | 只看该作者
uwyyk28 发表于 2014-5-5 09:23
问题1:
我已经实现了虚拟终端中文的显示 驱动源码里改了video/console下有关vt和fb的很多地方 还添加了c ...

用您说的第一种方法写了个应用 在lcd上输出‘中’字。。结果变成了‘涓’囧。。。。
void lcd_put_chinese(int x, int y, unsigned char *str)
{
        unsigned int area  = str[0] - 0xA1;
        unsigned int where = str[1] - 0xA1;
        unsigned char *dots = hzkmem + (area * 94 + where)*32;//找到点阵
        unsigned char byte;
       
        int i, j, b;
        for (i = 0; i < 16; i++)
                for (j = 0; j < 2; j++)
                {
                        byte = dots[i*2 + j];
                        for (b = 7; b >=0; b--)
                        {
                                if (byte & (1<<b))
                                {
                                        /* show */
                                        lcd_put_pixel(x+j*8+7-b, y+i, 0xffffff); /* 白 */
                                }
                                else
                                {
                                        /* hide */
                                        lcd_put_pixel(x+j*8+7-b, y+i, 0); /* 黑 */
                                }
                        }
                }
}
感觉偏移量的计算没有错哇??

使用特权

评论回复
11
uwyyk28| | 2014-5-5 22:55 | 只看该作者
yousuozi 发表于 2014-5-5 13:30
用您说的第一种方法写了个应用 在lcd上输出‘中’字。。结果变成了‘涓’囧。。。。
void lcd_put_chines ...

1. lcd_put_chinese函数调用时传入的参数分别是什么?
2. hzk open,mmap的代码也贴一下

使用特权

评论回复
12
yousuozi|  楼主 | 2014-5-6 09:22 | 只看该作者
uwyyk28 发表于 2014-5-5 22:55
1. lcd_put_chinese函数调用时传入的参数分别是什么?
2. hzk open,mmap的代码也贴一下 ...

我找到是什么原因了~~~
应用程序mmap的是HZK16的字库 用的编码格式是gb2312 但我的c文件是unicode编码的 所以直接导致偏移量就错了 现在我源文件另存为gb18030格式重新编译了 现在可以正常显示‘中’字拉~~

谢谢你的回答~~

使用特权

评论回复
13
uwyyk28| | 2014-5-6 09:25 | 只看该作者
yousuozi 发表于 2014-5-6 09:22
我找到是什么原因了~~~
应用程序mmap的是HZK16的字库 用的编码格式是gb2312 但我的c文件是unicode编码 ...

恩恩,解决了就好,unicode编码用freetype就可以解决。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

28

帖子

0

粉丝