toofree 发表于 2018-8-30 14:38
自己用软件转一个字,看看不就知道了吗?
不知道你用什么软件,什么分辨率,取模方式,横向、纵向,正数、 ...
我现在懂了,刚搜到
http://blog.csdn.net/oshan2012/article/details/79070705
本帖最后由 stm1024 于 2018-8-30 14:52 编辑
如果你想看DZK文件中对应16×16的GB2312汉字,倒是可以参考这个软件:
注意右下角的字就是C7区AE位对应的汉字“钱”。
你这个bin文件,不知道文字的编码是什么,然后字符大小是多少,你可以试试给你的软件,把bin文件重命名为我压缩包中的DZK文件,看看能否正常显示,如果可以,则表明是16×16的GB2312汉字,其他的就要要你软件生成的设置方式了。
stm1024 发表于 2018-8-30 14:51
如果你想看DZK文件中对应16×16的GB2312汉字,倒是可以参考这个软件:
这个软件是通过区号和位号,来显示字的,我想倒过来推,想通过字模就知道是哪个字,我现在手上的就是gb2312的字模库,
wwwheihei 发表于 2018-8-30 15:00
这个软件是通过区号和位号,来显示字的,我想倒过来推,想通过字模就知道是哪个字,我现在手上的就是gb231 ...
不不不,上部分那个图形,是直接显示的色块,16×16需要32字节,程序每次读32个字节,然后根据bit位显示出来,不信你可以试试修改字模文件。
stm1024 发表于 2018-8-30 15:02
不不不,上部分那个图形,是直接显示的色块,16×16需要32字节,程序每次读32个字节,然后根据bit位显示 ...
明白了 我得用我的子模库替换里面的子模库是吧?
wwwheihei 发表于 2018-8-30 15:06
明白了 我得用我的子模库替换里面的子模库是吧?
是的,当时写程序写的简单粗暴了点,直接hard code了,你把你的文件重命名成和我这个一样的。(推荐先做个备份)
stm1024 发表于 2018-8-30 15:30
是的,当时写程序写的简单粗暴了点,直接hard code了,你把你的文件重命名成和我这个一样的。(推荐先做 ...
明白了谢谢指导
stm1024 发表于 2018-8-30 15:30
是的,当时写程序写的简单粗暴了点,直接hard code了,你把你的文件重命名成和我这个一样的。(推荐先做 ...
你这个软件的读bit方式是什么?是哪种扫描方式,我想验证一下,刚才我学了一下。汉字第一个字“啊”,计算得出它的偏移量为b040,那么我打开DZK文件,找到了地址后面的32byte个数据,现在想用手画出来,但不知道软件的扫描模式?
本帖最后由 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,才能正确进行定位。
本帖最后由 stm1024 于 2018-8-31 11:05 编辑
wwwheihei 发表于 2018-8-31 09:51
我现在想看看汉字第一个字“啊”的字模,刚算出来偏移地址在b040,能告诉我你的软件的扫描读取模式吗?我 ...
用C#写的
字模定位FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
if (l > 0x7f)
fs.Seek(((h - 0x81) * 190 + (l - 0x41)) * 32, 0);
else
fs.Seek(((h - 0x81) * 190 + (l - 0x40)) * 32, 0);
fs.Read(buffer, 0, 32);
然后绘图的时候,是从左到右,从上到下扫描填充格子的。但是代码实现上,我是先画的左半部分(0,2,4..等偶数编号字节),然后再画右半部分的(1,3,5...等奇数编号字节)
DrawGrids();
int n = buffer.Length;//32
Graphics g=Graphics.FromImage(bmp);
for(int i=0;i<16;i++)
{
byte lc = buffer;
for(int j=0;j<8;j++)
{
if ((lc & 0x80) == 0x80)
g.FillRectangle(new SolidBrush(Color.Red), new Rectangle(xMargin + j * xGridSize, xMargin + i * xGridSize, xGridSize, xGridSize));
lc <<= 1;
}
byte rc = buffer;
for (int j = 0; j < 8; j++)
{
if ((rc & 0x80) == 0x80)
g.FillRectangle(new SolidBrush(Color.Red), new Rectangle(xMargin + (j+8) * xGridSize, xMargin + i * xGridSize, xGridSize, xGridSize));
rc <<= 1;
}
}
pb_mod.Image = bmp;