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

关于gb2312字库的问题

[复制链接]
wwwheihei 提问时间:2018-8-30 13:46 /
阅读主题, 点击返回1楼
收藏 评论24 发布时间:2018-8-30 13:46
24个回答
wwwheihei 回答时间:2018-8-30 14:46:28
toofree 发表于 2018-8-30 14:38
自己用软件转一个字,看看不就知道了吗?
不知道你用什么软件,什么分辨率,取模方式,横向、纵向,正数、 ...

我现在懂了,刚搜到

http://blog.csdn.net/oshan2012/article/details/79070705
stm1024 回答时间:2018-8-30 14:51:02
本帖最后由 stm1024 于 2018-8-30 14:52 编辑

如果你想看DZK文件中对应16×16的GB2312汉字,倒是可以参考这个软件:
DZKViewer.rar (413 KB, 下载次数: 8)

评分

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

查看全部评分

wwwheihei 回答时间:2018-8-30 15:00:42
stm1024 发表于 2018-8-30 14:51
如果你想看DZK文件中对应16×16的GB2312汉字,倒是可以参考这个软件:

这个软件是通过区号和位号,来显示字的,我想倒过来推,想通过字模就知道是哪个字,我现在手上的就是gb2312的字模库,
stm1024 回答时间:2018-8-30 15:02:34
wwwheihei 发表于 2018-8-30 15:00
这个软件是通过区号和位号,来显示字的,我想倒过来推,想通过字模就知道是哪个字,我现在手上的就是gb231 ...

不不不,上部分那个图形,是直接显示的色块,16×16需要32字节,程序每次读32个字节,然后根据bit位显示出来,不信你可以试试修改字模文件。
wwwheihei 回答时间:2018-8-30 15:06:57
stm1024 发表于 2018-8-30 15:02
不不不,上部分那个图形,是直接显示的色块,16×16需要32字节,程序每次读32个字节,然后根据bit位显示 ...

明白了 我得用我的子模库替换里面的子模库是吧?
stm1024 回答时间:2018-8-30 15:30:21
wwwheihei 发表于 2018-8-30 15:06
明白了 我得用我的子模库替换里面的子模库是吧?

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

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

你这个软件的读bit方式是什么?是哪种扫描方式,我想验证一下,刚才我学了一下。汉字第一个字“啊”,计算得出它的偏移量为b040,那么我打开DZK文件,找到了地址后面的32byte个数据,现在想用手画出来,但不知道软件的扫描模式?
wwwheihei 回答时间: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;
复制代码


所属标签

相似问题

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