c语言取模原理,字符取模显示原理
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语言取模原理,字符取模显示原理相关推荐
- 字符取模 linux 软件,字符取模显示原理
n年前写的,现在忘了,来回顾一下: 下面主要对字符的编码,即把字符转化为字节数组,字符如何显示在屏幕上即字符解码工作做了一些原理性分析,虽然有很多编码和解码方式,这是其中一种,但是最终目的是一样的,就 ...
- C语言中四种取整方式、取余/取模的运算以及负数取模的问题
零向取整.负无穷向取整.正无穷向取整.四舍五入取整 如果将一个浮点数赋值给整形,只会保存整数位: 这种取整方式为零向取整,C语言默认采用的是这种方式 C语言中也有对应的零向取整函数: 同理还有一种函数 ...
- 【C语言】深度理解 负数取余 取模
C语言深度理解 负数取余 取模 关于取余和取模的问题 定义 取余时有负数怎么计算? 取余和取模的区别 取余和取模时候等价什么时候不等价 总结 关于取余和取模的问题 许多小伙伴在刚开始学C语言的时候,知 ...
- c语言里取余数的运算的代码,Math——取模运算及取余运算(示例代码)
取模运算及取余运算 取余运算(Complementation)即我们小学时学的数学算术概念,而取模运算(Modulus Operation)常用于程序设计中 公式 a%b = a - (a/b * b ...
- C语言取模运算(取余运算)
C语言取模运算(取余运算) 取模算法: 取余(取模)的奥义 C语言运用 取模算法: 取模运算也叫取余运算,在C中用%来表示, 数学中叫mod. x mod y = x%y x%y = x - y[x/ ...
- Python 取模运算(取余)%误区及详解
Python 取模运算(取余)%误区及详解 首先,必须要先明确一个概念(针对新手),不要用数学求余数角度来思考模运算,python.Java等各种语言都有其不同的运行机制. python的模运算计算规 ...
- mysql取余 和 取模_java 取模运算% 实则取余 简述 例子 应用在数据库分库分表
java 取模运算% 实则取余 简述 例子 应用在数据库分库分表 求模运算与求余运算不同."模"是"Mod"的音译,模运算多应用于程序编写中. Mod的含义为 ...
- python模运算求余_取模运算和取余运算
取模运算和取余运算 取模运算( " Modulo Operation " )和取余运算 ( " Complementation " )两个概念有重叠的部分但又不 ...
- 取模运算和取余运算的区别
先说结论:取模和取余在计算的目标上是一致的,只是商的不同,导致结果不同,取余和取模在被除数.除数同号时,结果是等同的,异号时会有区别. 那么 Why? 取模,取余是怎样计算的 在计算机中,对于整型数a ...
最新文章
- dump文件_一种比Xml更敏捷的配置方式,Python Yaml 配置文件解析模块详解
- pymongo insert_many 批量插入
- Python编程学习:让函数更加灵活的*args和**kwargs(设计不同数量参数的函数)的简介、使用方法、经典案例之详细攻略
- leetcode 1833. 雪糕的最大数量
- BilibilivideoDownload下载器
- 超级浏览器究竟是什么?
- 未能找到主机服务器是什么鬼,未能找到指定主机服务器是什么意思
- 浅析 微信公共平台消息 开发原理
- 沧海一声笑计算机版本,各个版本的《沧海一声笑》,古韵十足
- 黑客是如何入侵网站?为什么企业网站需要渗透测试?
- Git 拉取远程仓库失败
- 图解CNN:通过100张图一步步理解CNN
- windows10LTSC下载与安装
- 解决win10资源管理器突然占用cpu过高问题
- hexo的next主题换到Yelee(Yilia)
- 如何在阿里云开通云服务器
- 【电力电子】【2011.08】通过谐波电流注入改善三相整流器输入功率因数
- bandgap基本知识(转载)
- excel 中插入文件
- 湍流——湍流积分长度
热门文章
- 3GPP R15 5GNR 协议概述
- 力扣刷题笔记 数组篇02——双指针(快慢指针)法
- 碳焙浓香型铁观音,为何在北方市场被严重冷落
- 快速搭建Cocos2dx for MAC开发环境
- xp系统steam无法连接到更新服务器,教你win10系统steam更新失败的解决教程
- 闲着无事,自己写的电脑wifi共享软件---WiFi Freedom
- 两轮差速机器人运动学模型
- 使用Candance FPGA System Planner和Alitum Designer Scripting加速原理图设计
- 名片自动录入系统的实现(转载)
- ESL3.3 子集的选择学习笔记(最优集选择,向前向后逐步选择等方法)