通用点阵字库生成工具

您所在的位置:网站首页 点阵图转换器 通用点阵字库生成工具

通用点阵字库生成工具

#通用点阵字库生成工具| 来源: 网络整理| 查看: 265

虽然点阵提取工具,网上有很多了,但是找来找去,没找到我满意的工具,于是自己写了一个小工具。 点阵字体,在嵌入式GUI开发中,用得也是非常频繁的。

主要有两种使用场景:

1.生成某种编码的全部点阵,以BIN的形式放在FLASH中加载。

2.生成部份文字的点阵,以C文件的方式,写在代码里。

本工具的特点:

1.完全免费,不用到处找破解工具;

2.通用性好,支持任意编码,任意语言,可以自定义编码;

3.可以生成BIN和C文件;

4.可以使用WINDOWS全部字体;

5.使用方便,界面整洁;

界面效果图: 这里写图片描述

作者:星沉地动

//————————————————————————————————————————-

2017.09.02 (V1.1)

添加高位在前和低位在前的选项;

调整预览界面;

下载地址1:http://446252221.ys168.com/ (我的工具/通用点阵提取工具V1.1.zip 247KB)

下载地址2:https://pan.baidu.com/s/1kVBUGbt

//————————————————————————————————————————-

2017.09.15

公开此工具源代码:

https://github.com/Jiangxiaogang/FontMaker

//————————————————————————————————————————

2017.10.12(V1.1.2)

优化输出C文件数据格式;

下载地址1:http://446252221.ys168.com/ (我的工具/通用点阵提取工具-V1.1.2.zip 247KB)

下载地址2:https://pan.baidu.com/s/1geZ51rt

常见问题:

1.如何使用其它标准字符集?

在软件目录下有一个”charset”文件夹,程序启动的时候会扫描该文件夹下面的*.cst文件,并加入标准字库列表中;

cst文件就是码表文件,每个CST文件代表一种字符编码表,CST文件的数据格式为字符集中所有字符的UNICODE编码,2字节为一个单位,低字节在前。

该文件夹下面有一个“charset.exe”的程序,可以方便地生成大多数标准码表.

2.字符集中的“用户定义”是什么意思?

使用非标准字符集的使用可以使用自定义码表,比如简体中文的编码是GB2312,有6000多文字,但如果实际项目中你只想要“中华人民共和国”这7个汉字,

就可以在输入框中输入你需要的文字,生成一个特殊应用的字库,当然这个字库中的文字的排列顺序与你输入的顺序保持一致。

3.如何使用生成的BIN文件?

本工具生成的BIN数据格式为最常用的数据格式,一般情况下兼容其它字库文件;

对于水平扫描方式,8bit对齐格式,比如12x12像素的字库,每一行有12个点,但是会占用16bit即2个字节来表示;

那么一个文字占用2x12=24字节,读取BIN的时候以24字节为单位读取即可;

4.生成BIN文件与生成C文件有什么区别?

BIN文件一般用在通过文件读取字库,C文件是嵌入到代码里的数据。

5.为什么有很多字体的中文文字看上去是一样的?

这是因为Windows自带的字体,大多数都不是中文字体,当显示中文的时候,系统会自动映射到默认的中文字体来显示,比如“宋体”, 宋体是使用点阵最清晰,最常规的字体,推荐使用宋体来做中文字库。

转载 : https://blog.csdn.net/qq446252221/article/details/53188278

源码: https://download.csdn.net/download/wowocpp/10513893

最好是用vs2010 打开

这里写图片描述

这里写图片描述

void CBitFont::UpdateBitmap(void) { HBITMAP hBitmap; BITMAPINFO bmi; ZeroMemory(&bmi,sizeof(bmi)); bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biWidth = m_nWidth; bmi.bmiHeader.biHeight = m_nHeight; bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biBitCount = 8; bmi.bmiHeader.biCompression = BI_RGB; hBitmap = ::CreateDIBSection(m_hdc,&bmi,DIB_RGB_COLORS,(void**)&m_pPixels,NULL,0); if(hBitmap != NULL) { if(m_hBitmap != NULL) { ::DeleteObject(m_hBitmap); } ::SelectObject(m_hdc,hBitmap); m_hBitmap = hBitmap; } } CBitFont::CBitFont(void) { HDC hdc; m_nOffsetX = 0; m_nOffsetY = 0; m_nWidth = 1; m_nHeight= 1; m_hBitmap = NULL; hdc = ::GetDC(NULL); m_hdc = ::CreateCompatibleDC(hdc); ::ReleaseDC(NULL,hdc); ::SetTextColor(m_hdc,RGB(255,255,255)); ::SetBkColor(m_hdc,RGB(0,0,0)); } void CBitFont::PaintFont(WCHAR ch) { RECT rc; SetRect(&rc,0,0,m_nWidth,m_nHeight); ::FillRect(m_hdc,&rc, (HBRUSH)GetStockObject(BLACK_BRUSH)); ::TextOut(m_hdc,m_nOffsetX,m_nOffsetY,&ch,1); }

这个里面的CreateDIBSection 的作用是什么? CreateDIBSection 与m_hdc 结合之后,在m_hdc 中绘图,数据会实时的反应到CreateDIBSection 返回的hBitmap 中去吗?



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3