首页 > 代码库 > hzk16在项目中的使用
hzk16在项目中的使用
最近做的项目中需要使用到hzk16。
以下转载自网络:
HZK16字库是符合GB2312标准的16×16点阵字库,HZK16的GB2312-80支持的汉字有6763个,符号682个. 其中一级汉字有 3755个,按声序排列,二级汉字有3008个,按偏旁部首排列. 我们在一些应用场合根本用不到这么多汉字字模, 所以在应用时就可以只提取部分字体作为己用.HZK16字库里的16×16汉字一共需要256个点来显示, 也就是说需要32个字节才能达到显示一个普通汉字的目的.我们知道一个GB2312汉字是由两个字节编码的,范围为0xA1A1~0xFEFE.A1-A9为符号区, B0到F7为汉字区. 每一个区有94个字符(注意:这只是编码的许可范围,不一定都有字型对应,比如符号区就有很多编码空白区域).
以下为部分代码:
int fd_fb;struct fb_var_screeninfo var;struct fb_fix_screeninfo fix;int screen_size;unsigned char *fbmem;unsigned int line_width;unsigned int pixel_width;int fd_hzk16;struct stat hzk_stat;unsigned char *hzkmem;void lcd_put_pixel(int x,int y,unsigned int color){ unsigned char *pen_8 = fbmem+y*line_width+x*pixel_width; unsigned short *pen_16; unsigned int *pen_32; unsigned char red,green,blue; pen_16 = (unsigned short *)pen_8; pen_32 = (unsigned int *)pen_8; switch(var.bits_per_pixel) { case 8: { *pen_8 = color; break; } case 16: { /* R:G:B = 5:6:5 */ red = ((color>>16)&0x1f)<<11; green = ((color>>8)&0x3f)<<6; blue = color&0x1f; *pen_16 = red | green | blue; break; } case 32: { *pen_32 = color; } default: { printf("Can‘t surport %d bpp\n",var.bits_per_pixel); break; } }}void lcd_put_ascii(int x,int y,unsigned char c){ unsigned char *dots = &fontdata_8x16[c*16]; int i,j; unsigned char byte; for(i=0;i<16;i++) { byte = dots[i]; for(j=7;j>=0;j--) { if(byte&(1<<j)) { /* show */ lcd_put_pixel(x+7-j,y+i,0xffffff); // 显示白色 } else { /* hide */ lcd_put_pixel(x+7-j,y+i,0x0); // 显示黑色 } } }}void lcd_put_chinese(int x,int y,unsigned char *str){ unsigned int area = str[0] - 0xA1; // 默认以UTF-8存储,"中"的UTF-8存储为D6D0,存储其实位置行列均为A1 unsigned int where = str[1] - 0xA1; unsigned char *dots = hzkmem + (area*94 + where)*32; // 每个区占据94个字符,每个字符占据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+8*j+7-j,y+i,0xffffff); // 显示白色 } else { /* hide */ lcd_put_pixel(x+8*j+7-j,y+i,0x0); // 显示黑色 } } } } }
hzk16在项目中的使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。