C#提取字模[复制即用]
在单片机控制LED屏幕的工程中,由于单片机资源有限,无法同时存入大量汉字的字模,故而需要一个PC节点将需要显示的内容临时存入Flash中,显示内容再读取响应扇区通过LED控制函数送上线
在此过程中,PC节点需要可以提取出字模,根据要求还需要封装成大小有限的帧,限定了数据格式
这部分代码参考了CSDN某博文,大佬用C#的LINQ写的一些方法着实精简好看,修改过程水平有限越写越繁琐,但是自认为更易读(我的无数层For =w=)
这部分代码是依附于一些winfrom控件的,包括
一个文本框textbox(tb_uartRecv.Text)(这个完全可以用一个新的String替代效果)
两个updown调整偏移(UD_X,UD_Y)
一个文本框提供字体格式(tb_originalText.Font)
哦对,我还顺手解决了一些英文字母数字其实只需要占8*16,GDI绘制的时候也是只绘制这么大的,另一半是空的
/// <summary>
/// 将文字按照选定的格式,每个字单独绘制出字模
/// 取模方式:阴码,行列式
/// </summary>
/// <param name="text">需要转化的文字内容</param>
/// <returns>有2倍文本长度个元素的ArrayList</returns>
private List<byte[]> getMatrix(String text)
{//返回一个ArrayList记录字模List<byte[]> matrixBuff = new List<byte[]>();string singleChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`~!@#$%^&*()-=_+[]{}\\|;':\",./<>? ";bool isSingle = false;//每8位组成一个字节,每16个字节当作一个子元素存入ArrayList//第一层for表示有i个汉字,每个汉字单独取一次字模保证间隔for (int i = 0; i < text.Length; i++){//判断是不是单字模字符isSingle = singleChars.Contains(text[0]);//定义位图大小Bitmap bmp = new Bitmap(isSingle ? 8 : 16, 16);//定义GDI工具Graphics g = Graphics.FromImage(bmp);//内部填充白色矩形g.FillRectangle(Brushes.White, new Rectangle() { X = 0, Y = 0, Height = 16, Width = isSingle ? 8 : 16 });//绘制文本框文字,根据参数位置微调,颜色为黑色g.DrawString(text[i].ToString(), tb_originalText.Font, Brushes.Black,new PointF() { X = Convert.ToSingle(UD_X.Text), Y = Convert.ToSingle(UD_Y.Text) });//利用LINQ中序列的方法,完成从位图中提取数据流tb_uartRecv.Text = string.Join("", Enumerable.Range(0, isSingle ? 128 : 256) //生成256个元素的序列.Select(a => new{//行列式取模:x值的循环范围随着a每增加128(16*8)向前移动8x = (a % 128) % 8 + (a / 128) * 8,//行列式取模:y值随着a每增加128(16*8),y从0开始a每增加8,y增加1y = (a % 128) / 8,//调试监视a的值z = a}) //将序列中的每个元素投影成拥有一对值的元素的新序列 .Select(x => bmp.GetPixel(x.x, x.y).GetBrightness() > 0.5f ? '0' : '1')); //将序列中的xy值带入bmp作为坐标,求出坐标的亮/暗//将字符串转化成布尔流var data = tb_uartRecv.Text.Select(x => x == '1').Concat(Enumerable.Repeat(false, isSingle ? 128 : 256)).Take(isSingle ? 128 : 256).ToArray();//第二层for表示需要j个ArrayList子元素for (int j = 0; j < ((isSingle) ? 1 : 2); j++){//字节数组记录一半汉字数据byte[] buffer = new byte[16];//第三层for表示每16个字节构成一个ArrayList子元素for (int k = 0; k < 16; k++){//取位标尺,通过位移记录正当取值的字节位byte ruler = 0x80;//第四层for表示按位获得字模值,并每8为存为一个字节for (int m = 0; m < 8; m++){if (data[m + k * 8 + j * 128]){buffer[k] |= ruler;}else{buffer[k] &= (byte)~ruler;}ruler = (byte)(ruler >> 1);}}//添加一个子元素matrixBuff.Add(buffer);}}return matrixBuff;
}
C#提取字模[复制即用]相关推荐
- 如何利用windows自带的矢量字库提取字模
1 字体设置 首先需要设置字体.Win32 SDK提供了用于字体选择的通用对话框,只需调用ChooseFont函数,其返回值为一个布尔值.具体定义为BOOL ChooseFont(LPCHOOSEF ...
- 提取文件名+复制+改名+批量创建文件程序(Excel VBA版)
用Excel VBA做了个文件处理小工具,集合了文件名提取.文件复制.改名及批量创建文件.搜索复制文件的功能. (注:如果是规则改名,建议使用 拖把更名器,使用起来更直观,下载链接中附拖把更名器程序) ...
- 51单片机实例学习四 128X64 液晶显示器、PS/2与单片机通信、密码锁
十四.128X64 液晶显示器的基本应用 [实验任务] 利用128X64点阵液晶显示屏显示图片,字符,汉字,画点,实现其基本显示 功能. [硬件电路图] [实验原理] 关于液晶显示的原理请用户自行其查 ...
- A_A07_002 PCtoLCD2013软件图形与文字提取
A_A07_002 PCtoLCD2013软件图形与文字提取 一.软件下载 二.交流学习 三.提取文字 四.提取图片 五.注意事项 一.软件下载 字模软件(PCtoLCD2013)下载 直戳跳转 提取 ...
- Oracle GoldenGate复制过程
这两种Oracle GoldenGate体系结构共有许多数据复制过程. 1.什么是Extract? Extract是一个过程,该过程被配置为针对源数据库运行或被配置为在下游挖掘数据库(仅Oracle) ...
- 液晶显示器汉字字模存储及显示
一.3 种汉字字模存储和提取的方法 1.字模存放在程序存储器中; 这种方法较为常用,针对程序不大或单片机无外部扩展数据存储区功能的情况. 2.通过外扩的EEPROM 存储汉字字模数据,将其作为外部数据 ...
- 4pin oled字模,oled图片编码生成方法
在制作手工的时候,选用了一款4pin 的OLED单色显示屏,在取字模的时候遇到一些问题,特此做一下记录,对于也遇到这方面问题的朋友,也可以提供一些思路. 所选用的4pin 的OLED 是在淘宝上购买的 ...
- linux 数据包复制,请问在LINUX下是如何判断数据包属于同一条连接的--
请问在LINUX下是如何判断数据包属于同一条连接的-- (2011-09-01 06:29:40) 标签: 杂谈 请问在LINUX下是如何判断数据包属于同一条连接的??比如我在某个数据包中发现了可疑的 ...
- Andorid Tools--强大的Apk反编译,Rom提取工具,从此告别枯燥的命令
Andorid Tools--强大的Apk反编译,Rom提取工具,从此告别枯燥的命令 零.说明 1.本软件为兴趣而写,如有侵权,请告知. 2.本软件为本人所编写,未经允许,不得转载. 一.软件界面(当 ...
- 基于I2C/SPI总线的温湿度采集与OLED显示
实验一 实验目的 学习I2C总线通信协议,使用STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出.具体任务: 1)解释什么是"软件I2 ...
最新文章
- 九、深入Java字符串(上篇)
- mysql中insert into select from的使用
- asp.net C# 时间格式大全
- c语言 队列 游戏,循环队列实现约瑟夫游戏(C语言版)
- Marketing Cloud的notification的OData实现
- java obix_obix协议在java中的配置和使用详解
- HttpWebRequest类
- Ubuntu 中Mysql 操作
- Android两个控件叠在一起,如何让被挡住的控件显示出来
- std::locale与boost::locale的学习
- 2021-08-17Cookie 详解
- 鼠标滑轮滚动到相应位置,对应位置的div触发一些效果实现方式
- hdu Train Problem I
- c语言计算题怎么输出答案,C语言练习题答案
- Vaa3d_DIADEM metric基本介绍_SWC拓扑结构量纲
- Eclipse 更换皮肤
- 【C标准库】通过locale.h设置美元的格式
- 【pyhton解决数学问题】2用python解方程
- poi 删除 word文档中的图片
- Java:Java还很重要吗?