当前位置:   article > 正文

C# 转换TTF为GB2312点阵字库_怎么把ttf转成点阵字

怎么把ttf转成点阵字

C# 转换TTF为GB2312点阵字库

前段时间碰到的一个项目要求在LCD上显示收到的短信,需要12×12的GB2312点阵字库。因为板子上已经放了块W25Q64了,就想着找个字库烧进去。最后虽然是用HZK12,但是总感觉不能释然,于是打算写个用系统字体库来生成点阵字库的工具。
网上有很多有这类的代码,不过我好像没找到我需要的。
思路是这样

  1. 遍历GB2312
  2. 将汉字绘制到Bitmap
  3. 按取模形式提取Bitmap上的数据(我只用列行式)
  4. 按字库烧入方案输出到文件

首先为了遍历GB2312,要能用区码和位码生成汉字

//用GB2312区码和位码获取字符
public static string GetGB2312CH(byte areaCode, byte bitCode) {
    return Encoding.GetEncoding("gb2312").GetString(new byte[2]{areaCode, bitCode});
}
  • 1
  • 2
  • 3
  • 4

然后把汉字绘制到Bitmap

//获取字符串图片
public static Bitmap GetStrImage(string hz, Font font) {
    Bitmap bmp = new Bitmap(1, 1);
    Graphics g = Graphics.FromImage(bmp);
    SizeF sizeF = g.MeasureString(hz, font);
    //重设位图大小
    bmp = new Bitmap(Convert.ToInt32(sizeF.Width), Convert.ToInt32(sizeF.Height));
    g = Graphics.FromImage(bmp);
    //背景色黑色
    g.Clear(Color.Black);
    g.DrawString(hz, font, new SolidBrush(Color.White), new PointF(0, 0));
    return bmp;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

再按点阵字库的要求提取Bitmap上的像素点数据,我只用到了列行式顺向的点阵

//检查Bitmap的一行有没有有效数据
public static bool CheckBitmapRow(Bitmap src, int row) {
    for (int i=0; i<src.Width; i++) {
        
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/715941
推荐阅读
相关标签
  

闽ICP备14008679号