在单片机控制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#提取字模[复制即用]相关推荐

  1. 如何利用windows自带的矢量字库提取字模

    1  字体设置 首先需要设置字体.Win32 SDK提供了用于字体选择的通用对话框,只需调用ChooseFont函数,其返回值为一个布尔值.具体定义为BOOL ChooseFont(LPCHOOSEF ...

  2. 提取文件名+复制+改名+批量创建文件程序(Excel VBA版)

    用Excel VBA做了个文件处理小工具,集合了文件名提取.文件复制.改名及批量创建文件.搜索复制文件的功能. (注:如果是规则改名,建议使用 拖把更名器,使用起来更直观,下载链接中附拖把更名器程序) ...

  3. 51单片机实例学习四 128X64 液晶显示器、PS/2与单片机通信、密码锁

    十四.128X64 液晶显示器的基本应用 [实验任务] 利用128X64点阵液晶显示屏显示图片,字符,汉字,画点,实现其基本显示 功能. [硬件电路图] [实验原理] 关于液晶显示的原理请用户自行其查 ...

  4. A_A07_002 PCtoLCD2013软件图形与文字提取

    A_A07_002 PCtoLCD2013软件图形与文字提取 一.软件下载 二.交流学习 三.提取文字 四.提取图片 五.注意事项 一.软件下载 字模软件(PCtoLCD2013)下载 直戳跳转 提取 ...

  5. Oracle GoldenGate复制过程

    这两种Oracle GoldenGate体系结构共有许多数据复制过程. 1.什么是Extract? Extract是一个过程,该过程被配置为针对源数据库运行或被配置为在下游挖掘数据库(仅Oracle) ...

  6. 液晶显示器汉字字模存储及显示

    一.3 种汉字字模存储和提取的方法 1.字模存放在程序存储器中; 这种方法较为常用,针对程序不大或单片机无外部扩展数据存储区功能的情况. 2.通过外扩的EEPROM 存储汉字字模数据,将其作为外部数据 ...

  7. 4pin oled字模,oled图片编码生成方法

    在制作手工的时候,选用了一款4pin 的OLED单色显示屏,在取字模的时候遇到一些问题,特此做一下记录,对于也遇到这方面问题的朋友,也可以提供一些思路. 所选用的4pin 的OLED 是在淘宝上购买的 ...

  8. linux 数据包复制,请问在LINUX下是如何判断数据包属于同一条连接的--

    请问在LINUX下是如何判断数据包属于同一条连接的-- (2011-09-01 06:29:40) 标签: 杂谈 请问在LINUX下是如何判断数据包属于同一条连接的??比如我在某个数据包中发现了可疑的 ...

  9. Andorid Tools--强大的Apk反编译,Rom提取工具,从此告别枯燥的命令

    Andorid Tools--强大的Apk反编译,Rom提取工具,从此告别枯燥的命令 零.说明 1.本软件为兴趣而写,如有侵权,请告知. 2.本软件为本人所编写,未经允许,不得转载. 一.软件界面(当 ...

  10. 基于I2C/SPI总线的温湿度采集与OLED显示

    实验一 实验目的 学习I2C总线通信协议,使用STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出.具体任务: 1)解释什么是"软件I2 ...

最新文章

  1. 九、深入Java字符串(上篇)
  2. mysql中insert into select from的使用
  3. asp.net C# 时间格式大全
  4. c语言 队列 游戏,循环队列实现约瑟夫游戏(C语言版)
  5. Marketing Cloud的notification的OData实现
  6. java obix_obix协议在java中的配置和使用详解
  7. HttpWebRequest类
  8. Ubuntu 中Mysql 操作
  9. Android两个控件叠在一起,如何让被挡住的控件显示出来
  10. std::locale与boost::locale的学习
  11. 2021-08-17Cookie 详解
  12. 鼠标滑轮滚动到相应位置,对应位置的div触发一些效果实现方式
  13. hdu Train Problem I
  14. c语言计算题怎么输出答案,C语言练习题答案
  15. Vaa3d_DIADEM metric基本介绍_SWC拓扑结构量纲
  16. Eclipse 更换皮肤
  17. 【C标准库】通过locale.h设置美元的格式
  18. 【pyhton解决数学问题】2用python解方程
  19. poi 删除 word文档中的图片
  20. Java:Java还很重要吗?

热门文章

  1. 用友软件用友二次开发用友单据导入用友凭证导入工具用友EXCEL导入工具EXCEL导入凭证
  2. 深入FM和FFM原理与实践
  3. 计算机藏应用,应用隐藏大师计算器
  4. Open vSwitch: Provider 网络
  5. 下载ue5和古代山谷
  6. 无敌论坛_无敌分享网_无敌资源网|专注CG教程和素材分享
  7. 客所思kx 2传奇版控制面板
  8. 高中计算机会考vb教程,高中会考计算机vb知识点
  9. MFC基础之字符集,Unicode字符集,多字节字符集
  10. php将文字生成图片显示,php生成文字图片效果