你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于gb2312字库的问题

[复制链接]
ssssss 提问时间:2018-8-30 13:46 /
阅读主题, 点击返回1楼
收藏 评论24 发布时间:2018-8-30 13:46
24个回答
STM1024 回答时间:2018-8-30 15:30:21
wwwheihei 发表于 2018-8-30 15:06
明白了 我得用我的子模库替换里面的子模库是吧?

是的,当时写程序写的简单粗暴了点,直接hard code了,你把你的文件重命名成和我这个一样的。(推荐先做个备份)
ssssss 回答时间:2018-8-30 15:33:17
stm1024 发表于 2018-8-30 15:30
是的,当时写程序写的简单粗暴了点,直接hard code了,你把你的文件重命名成和我这个一样的。(推荐先做 ...

明白了谢谢指导
ssssss 回答时间:2018-8-30 17:51:40
stm1024 发表于 2018-8-30 15:30
是的,当时写程序写的简单粗暴了点,直接hard code了,你把你的文件重命名成和我这个一样的。(推荐先做 ...

你这个软件的读bit方式是什么?是哪种扫描方式,我想验证一下,刚才我学了一下。汉字第一个字“啊”,计算得出它的偏移量为b040,那么我打开DZK文件,找到了地址后面的32byte个数据,现在想用手画出来,但不知道软件的扫描模式?
ssssss 回答时间:2018-8-31 09:51:41
本帖最后由 wwwheihei 于 2018-8-31 10:03 编辑
stm1024 发表于 2018-8-30 15:30
是的,当时写程序写的简单粗暴了点,直接hard code了,你把你的文件重命名成和我这个一样的。(推荐先做 ...

我现在想看看汉字第一个字“啊”的字模,刚算出来偏移地址在b040,能告诉我你的软件的扫描读取模式吗?我想手动画出“啊”字算法如下:
GB2312编码总共分了94个区,编码从0xA1 ~OxFE,每个区又有94个位,编码从0xA1 ~OxFE。比如我们常见的“啊”字,他的编码是B0A1,那么我们就可以根据这个编码来计算出他所在字库的地址。“啊”字的区码为BO,位码位A1,那么他所在的地址为((B0-A1) X 94+(A1- A1))X每个汉字的占用字节数。以12X 12为例,那么汉字“啊”所在的地址为((B0-A1)X94+(A1 - A1))X24= 33840(十六进制表示为0x8430),那么从地址0x8430开始的24个字节就是汉字“啊”的点阵数据。

      当选择移除预留选项时,则AA-AFP 区将移除,这时,当区码大于A9时需再减6,才能正确进行定位。


oo.png
STM1024 回答时间:2018-8-31 10:58:18
本帖最后由 stm1024 于 2018-8-31 11:05 编辑
wwwheihei 发表于 2018-8-31 09:51
我现在想看看汉字第一个字“啊”的字模,刚算出来偏移地址在b040,能告诉我你的软件的扫描读取模式吗?我 ...

用C#写的
字模定位
  1. FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
  2.             if (l > 0x7f)
  3.                 fs.Seek(((h - 0x81) * 190 + (l - 0x41)) * 32, 0);
  4.             else
  5.                 fs.Seek(((h - 0x81) * 190 + (l - 0x40)) * 32, 0);
  6.             fs.Read(buffer, 0, 32);
复制代码

然后绘图的时候,是从左到右,从上到下扫描填充格子的。但是代码实现上,我是先画的左半部分(0,2,4..等偶数编号字节),然后再画右半部分的(1,3,5...等奇数编号字节)
  1. DrawGrids();
  2.             int n = buffer.Length;//32
  3.             Graphics g=Graphics.FromImage(bmp);

  4.             for(int i=0;i<16;i++)
  5.             {
  6.                 byte lc = buffer[2*i];
  7.                 for(int j=0;j<8;j++)
  8.                 {
  9.                     if ((lc & 0x80) == 0x80)
  10.                         g.FillRectangle(new SolidBrush(Color.Red), new Rectangle(xMargin + j * xGridSize, xMargin + i * xGridSize, xGridSize, xGridSize));
  11.                     lc <<= 1;
  12.                 }

  13.                 byte rc = buffer[2 * i + 1];
  14.                 for (int j = 0; j < 8; j++)
  15.                 {
  16.                     if ((rc & 0x80) == 0x80)
  17.                         g.FillRectangle(new SolidBrush(Color.Red), new Rectangle(xMargin + (j+8) * xGridSize, xMargin + i * xGridSize, xGridSize, xGridSize));
  18.                     rc <<= 1;
  19.                 }
  20.             }
  21.             pb_mod.Image = bmp;
复制代码


ssssss 回答时间:2018-8-31 11:57:43
stm1024 发表于 2018-8-31 10:58
用C#写的
字模定位
然后绘图的时候,是从左到右,从上到下扫描填充格子的。但是代码实现上,我是先画的左 ...

原来您是作者,可以加几种模式然后分享软件出来吗
STM1024 回答时间:2018-8-31 12:00:38
本帖最后由 stm1024 于 2018-8-31 12:08 编辑
wwwheihei 发表于 2018-8-31 11:57
原来您是作者,可以加几种模式然后分享软件出来吗

额,做这种事情得看心情,也要有时间。
不过最近挺忙没时间,然后也没心情……

模式的问题……其实这个也不是没想过, 基本上有
行模式,又可分为从左到右,或者从右到左
列模式:又可分为从上到下,或者从下到上
然后行/列模式可以做阴文(0显示1不显示)或阳文(正常的1显示0不显示)
这些组合,就可以达到8种,和一些TFT彩屏的方式差不多了
ssssss 回答时间:2018-8-31 15:26:07
stm1024 发表于 2018-8-31 12:00
额,做这种事情得看心情,也要有时间。
不过最近挺忙没时间,然后也没心情……

期待。。。。。。
wolfgang 回答时间:2018-8-31 16:02:23
字库?看你能否找到UCDOS的字库,那里面很多。
国标库文件里面也能找到,很多寻址方法

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

ssssss 回答时间:2018-8-31 16:11:17
wolfgang2015 发表于 2018-8-31 16:02
字库?看你能否找到UCDOS的字库,那里面很多。
国标库文件里面也能找到,很多寻址方法 ...

我看的只是gb2312而已
12

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版