因为是n年前写的,所以现在忘了,但是回头看看吧:
下面主要是将文字的编码,即文字转换成字节数组,对文字如何显示在屏幕上,即文字的解码工作进行了一些原理上的分析。 有很多编码方式和解码方式,这只是其中之一,但最终的目的是相同的,就是如何在屏幕上显示汉字。 仅供参考。
字符编码原理
图像. png
评论:
表示像素没有颜色,其位用0表示。
表示像素已着色,其位用1表示。
请看上面的照片。 显示着汉字的“人”。 每一格表示一个像素。 显示“人”字时使用了1616像素。 如果用1位二进制表示每个像素,则1616/8=32字节表示一个字符。 如果像素从左到右、从上到下扫描:
第一行的第一个字节是0x01,第二个字节是0x00;
第二行的第一个字节是0x01,第二个字节是0x80; 依次类推。
得到这样的字节数组。 const unsigned char ren[]=
{0x 01,0x 00,0x 01,0x 80,0x 01,0x 00,0x 01,0x 00,0x 02,0x 02,0x 02,0x 02,0x 02,0x 80,0x 80
此字节数组通过模仿各种字符将所有字符分解为32字节的单字节数组。
字符模板是指用一个个像素表示汉字笔划,然后按一定顺序(从左到右,从上到下)将这些像素组合成一个字节数组。 其中,每个字节中的1是彩色处理(颜色是可以自己选择的),例如"
,0是不着色的处理(即默认的背景色),例如"。 通过为32位字节分别添加颜色,汉字和其他字符将显示在屏幕上。
画面上显示的原理如下所示。
//绘制1616大小的中文字符,每行扫描16个像素,一共扫描16行16*16。
相当于文字解码作业
voiddraw_text16(uint32x,UINT32 y,UINT32 color,const unsigned char ch[] ) )
{
//UINT32是自己定义的数据类型,相当于int类型。 使用c语言的typedef函数定义数据类型,如typedef unsigned int UINT32。
//x,y坐标指定在画面上的哪个位置显示,const unsigned char ren[]表示模仿了字符的字节排列,color表示上面的哪个颜色,如果颜色是8位,则可以从256中选择
unsigned short int i,j;
unsigned char mask,buffer;
for(I=0; i16; I )
{
//I表示行数,每行16像素,一共16行,所以每行16/8=2字节。
//2、为什么要分成两部分来写呢,因为char型是8位,每行是16位,所以分为第1字节和第2字节。
//3,每个字节8位,分别扫描各位的值是1还是0,1表示着色,0表示不着色,选择要着色。 不着色而选择白色的情况下,一般给颜色选择黑色。 相当于这个word文档的显示方法。
//4,mask说明了继续向右移动,扫描字节的各位。
mask=0x80; //口罩
buffer=ch[i*2]; 提取//1行的第一个字节
for(j=0; j8; j )
{
缓冲掩码(if )
{
putpixel(xj,y i,color ); //给笔划上色实际上是把颜色的值写入帧存储器对应的地址,如果帧是画面的话,那个画面上有很多颜色,每种颜色都有固定的地址。
}
最大值=最大值1; //因为扫描字节的各位,所以mask每次扫描时都会向右移动一位。
}
mask=0x80; //掩码主要用于扫描字节的每一位是否为1,如果是1,则表示着色,如果是0,则表示不着色。
buffer=ch[i*2 1];//提取第一行的第二个字节
for(j=0; j8; j )
{
缓冲掩码(if )
{
putpixel(xj8,y i,color ); //给笔划上色
}
最大值=最大值1;
}
}
}
putpixel(xj8,y i,color )函数是笔划的颜色表示。 请看以下内容
//绘制像素点,并为每个像素着色
voidputpixel(u32x、U32 y、U32 c ) )。
{
//U32与上面分析的UINT数据类型相同。
LCD_BUFFER[y][x]=c;
//LCD_BUFFER数组表示帧存储器的首地址,y、x是像素的坐标,c是左、右序号,共256色,各自的左序号为0-255,将左、右序号写入对应的帧存储器的地址。
}
用一位数表示每个像素时,按一定的顺序扫描。 从左到右,从上到下,这决定了各位在屏幕上的位置。 如果该一位是1****,则表示着色,如果是****0,则表示不着色,如果一个字符显示在****1616****个像素面积上,则也可以是100个字符****y ) ),则对于在汉字的各像素表示* * * * LCD * * *上的绝对位置) x i,y j****的同时也能够确定汉字在帧存储器上的位置的着色问题,请参考* * *。 ****1****时,将指定的颜色写入帧存储器的位置。 例如,0****时不着色,将默认背景色写入帧存储器地址