n年前写的,现在忘了,来回顾一下:

下面主要对字符的编码,即把字符转化为字节数组,字符如何显示在屏幕上即字符解码工作做了一些原理性分析,虽然有很多编码和解码方式,这是其中一种,但是最终目的是一样的,就是如何把汉字显示在屏幕上。一下仅供参考。

字符编码原理

图片.png

备注:

表示像素没有上色,用0表示该位。

表示像素上色,用1表示该位。

请看上面图:显示汉字“人”,每一小格表示一个像素,显示“人”字一共用了1616个像素,如果每个像素用1位二进制表示的话,那么一共用1616/8=32个字节表示一个字符。如果像素是从左到右,从上到下的方式扫描的:那么

第一行第一个字节是0x01,第二个字节是0x00;

第二行第一个字节是0x01,第二个字节是0x80;依次类推。

那么我们就会得到这样一个字节数组:const unsigned char ren[]=

{0x01,0x00,0x01,0x80,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x02,0x80,0x02,0x80,0x04,0x80,0x04,0x40,0x08,0x60,0x08,0x30,0x10,0x18,0x20,0x0E,0x40,0x04,0x00,0x00}; /"人",0/

这个字节数组就是对各种字符取模的结果,把所有字符拆成一个字节数组,大小为32个字节。

所谓字符取模就是汉字的笔画用一个个像素表示,然后按一定顺序(从左到右,从上到下顺序)将这些像素组成一个字节数组。其中每个字节中的1,表示上色处理(颜色可以自己选择),如》》

,0表示不上色处理(就是,还是默认背景色),如》》

。通过对32位字节分别上色,这样就在屏幕上显示了汉字和其它字符了。

下面是屏幕上显示原理:

//绘制大小为16×16的中文字符,扫描每一行16个像素,一共扫描16行即16*16,

相当于字符解码工作

void Draw_Text16(UINT32 x,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;i<16;i++)

{

//1、i表示行数,每一行16个像素、一共16行,所以每一行16/8=2个字节。

//2、为什么分成两部分写,因为char类型是8位的,而每一行是16位的,所以就分成第一个字节和第二字节了。

//3、每个字节8位,所以分别扫描每一位的值是1还是0,如果是1表示要上色,0表示不上色,然后选择要上哪一种颜色。如果不上色颜色选择白色,一般上色选择黑色。相当于这个word 文档显示方式。

//4、mask不断右移说明要把字节中每一位都要扫描到。

mask=0x80; //掩码

buffer=ch[i*2]; //提取一行的第一个字节

for(j=0;j<8;j++)

{

if(buffer&mask)

{

PutPixel(x+j,y+i,color); //为笔画上色,其实就是把颜色值写到帧内存中相应地址中去,帧就是一幅画面,那么这幅画面就有很多颜色了,每个颜色都有一个固定地址。

}

mask=mask>>1; //扫描字节的每一位,所以mask每扫描一次,就向右移一位。

}

mask=0x80; //掩码,主要是用来扫描每一个字节的每一位是否为1的,如果是1那么就表示要上色,如果为0,表示不上色。

buffer=ch[i*2+1]; //提取一行的第二个字节

for(j=0;j<8;j++)

{

if(buffer&mask)

{

PutPixel(x+j+8,y+i,color); //为笔画上色

}

mask=mask>>1;

}

}

}

PutPixel(x+j+8,y+i,color)函数是为笔画上色的,请看下面

//绘制像素点,给每个像素上色

voidPutPixel(U32 x,U32 y, U32 c )

{

// U32和上面分析的UINT数据类型一样。

LCD_BUFFER[y][x] = c;

// LCD_BUFFER数组表示帧内存的起始地址,y,x就是像素的坐标了,c就是颜色的序号,一共256种颜色,每一种颜色的编号是0-255,就是把颜色写到对应的帧内存地址中去。

}

如果把每个像素用一位来表示,按一定顺序扫描(从左到右,从上到下,这样就确定每一位在屏幕上的位置了),如果这一位是1****表示上色,如果是****0表示不上色,如果一个字符在****1616****个像素面积上显示,那么可以用1616/8=32****个字节来表示这个面积上所有的像素,,注意字节的顺序哦(从右到左,从上到下,这些顺序相当于确定这个汉字笔画的相对位置(i****,****j)了)。如果在****LCD****上给出要显示汉字绝对坐标(x****,****y),那么即可确定汉字每一个像素在****LCD****上显示绝对位置(x+i,y+j****),同时也确定汉字在帧内存中位置(地址)。对于上色问题,我们用****32****个字节中每一位是1****还是****0来做标志,如果是****1****,那么把指定的颜色写到其帧内存位置中去,如是0****就不上色,即默认背景颜色写到帧内存地址中。

c语言取模原理,字符取模显示原理相关推荐

  1. 字符取模 linux 软件,字符取模显示原理

    n年前写的,现在忘了,来回顾一下: 下面主要对字符的编码,即把字符转化为字节数组,字符如何显示在屏幕上即字符解码工作做了一些原理性分析,虽然有很多编码和解码方式,这是其中一种,但是最终目的是一样的,就 ...

  2. C语言中四种取整方式、取余/取模的运算以及负数取模的问题

    零向取整.负无穷向取整.正无穷向取整.四舍五入取整 如果将一个浮点数赋值给整形,只会保存整数位: 这种取整方式为零向取整,C语言默认采用的是这种方式 C语言中也有对应的零向取整函数: 同理还有一种函数 ...

  3. 【C语言】深度理解 负数取余 取模

    C语言深度理解 负数取余 取模 关于取余和取模的问题 定义 取余时有负数怎么计算? 取余和取模的区别 取余和取模时候等价什么时候不等价 总结 关于取余和取模的问题 许多小伙伴在刚开始学C语言的时候,知 ...

  4. c语言里取余数的运算的代码,Math——取模运算及取余运算(示例代码)

    取模运算及取余运算 取余运算(Complementation)即我们小学时学的数学算术概念,而取模运算(Modulus Operation)常用于程序设计中 公式 a%b = a - (a/b * b ...

  5. C语言取模运算(取余运算)

    C语言取模运算(取余运算) 取模算法: 取余(取模)的奥义 C语言运用 取模算法: 取模运算也叫取余运算,在C中用%来表示, 数学中叫mod. x mod y = x%y x%y = x - y[x/ ...

  6. Python 取模运算(取余)%误区及详解

    Python 取模运算(取余)%误区及详解 首先,必须要先明确一个概念(针对新手),不要用数学求余数角度来思考模运算,python.Java等各种语言都有其不同的运行机制. python的模运算计算规 ...

  7. mysql取余 和 取模_java 取模运算% 实则取余 简述 例子 应用在数据库分库分表

    java 取模运算%  实则取余 简述 例子 应用在数据库分库分表 求模运算与求余运算不同."模"是"Mod"的音译,模运算多应用于程序编写中. Mod的含义为 ...

  8. python模运算求余_取模运算和取余运算

    取模运算和取余运算 取模运算( " Modulo Operation " )和取余运算 ( " Complementation " )两个概念有重叠的部分但又不 ...

  9. 取模运算和取余运算的区别

    先说结论:取模和取余在计算的目标上是一致的,只是商的不同,导致结果不同,取余和取模在被除数.除数同号时,结果是等同的,异号时会有区别. 那么 Why? 取模,取余是怎样计算的 在计算机中,对于整型数a ...

最新文章

  1. dump文件_一种比Xml更敏捷的配置方式,Python Yaml 配置文件解析模块详解
  2. pymongo insert_many 批量插入
  3. Python编程学习:让函数更加灵活的*args和**kwargs(设计不同数量参数的函数)的简介、使用方法、经典案例之详细攻略
  4. leetcode 1833. 雪糕的最大数量
  5. BilibilivideoDownload下载器
  6. 超级浏览器究竟是什么?
  7. 未能找到主机服务器是什么鬼,未能找到指定主机服务器是什么意思
  8. 浅析 微信公共平台消息 开发原理
  9. 沧海一声笑计算机版本,各个版本的《沧海一声笑》,古韵十足
  10. 黑客是如何入侵网站?为什么企业网站需要渗透测试?
  11. Git 拉取远程仓库失败
  12. 图解CNN:通过100张图一步步理解CNN
  13. windows10LTSC下载与安装
  14. 解决win10资源管理器突然占用cpu过高问题
  15. hexo的next主题换到Yelee(Yilia)
  16. 如何在阿里云开通云服务器
  17. 【电力电子】【2011.08】通过谐波电流注入改善三相整流器输入功率因数
  18. bandgap基本知识(转载)
  19. excel 中插入文件
  20. 湍流——湍流积分长度

热门文章

  1. 3GPP R15 5GNR 协议概述
  2. 力扣刷题笔记 数组篇02——双指针(快慢指针)法
  3. 碳焙浓香型铁观音,为何在北方市场被严重冷落
  4. 快速搭建Cocos2dx for MAC开发环境
  5. xp系统steam无法连接到更新服务器,教你win10系统steam更新失败的解决教程
  6. 闲着无事,自己写的电脑wifi共享软件---WiFi Freedom
  7. 两轮差速机器人运动学模型
  8. 使用Candance FPGA System Planner和Alitum Designer Scripting加速原理图设计
  9. 名片自动录入系统的实现(转载)
  10. ESL3.3 子集的选择学习笔记(最优集选择,向前向后逐步选择等方法)