制作原理
我们看到屏幕上显示的汉字的字型有两种表达方式:一种称为矢量方式,一种称为点阵方式。其中的点阵方式较为简单,其原理就是好比:铺地砖。有的铺为白色,有的铺为黑色,只要精心安排,就会组成我们希望的图案,当然也可以是汉字。
瓷砖越多,铺出的图案效果越细腻,这就是点阵的规模。56点阵汉字用56 x 56 = 3136个像素点来描绘。
当我们需要记录一个汉字信息的时候,当然不是存储汉字的字型,而是存储它的编码。汉字可以有多种编码的规则,其中GB2312的编码规则是:一个汉字用两个字节表示,前一个字节表示区号,后一个表示区中的偏移序号
在本博客资源里面有隶书和行楷的两种56点阵字体下载
事先准备:
准备好代码生成的.exe程序(源码在下面),一个空的bmp文件(这里可以新建一个txt文本,改成bmp的扩展名就可以了),并且和字体的txt文件放在同一个目录下。
启动终端:
为了支持中文的显示,我们改为中文的编码,输入chcp 936
回车即可:
接下来进入我们刚才文件及程序所在的目录,这里的话当前目录就是文件所在目录,输入demo.exe 56.bmp LiShu56.txt
回车,格式为程序名+bmp文件名+txt文档名
汉字自行输入:
完成:
查看:
用另一种字体:
源码附录:
/*********************************************************************************
**** FileName: demo.c
**** Function: 印章的打印
**** Usage: demo.exe xxxx.bmp xxx.txt
**** Author: linshuheng
**** Date: 2020-06-03
*********************************************************************************/
//#include <CONIO.H>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <malloc.h>
#include <string.h>
char strk[4];
char stri[120];
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
/**** The file header of bmp file 位图文件头*****/
#include <pshpack2.h>
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfoffBits;
} BITMAPFILEHEADER;
#include <poppack.h>
/**** The information header of bmp file 位图信息头*****/
typedef struct tagBITMAPINFOHEADER {
DWORD biSize;
DWORD biWidth;
DWORD biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompress;
DWORD biSizeImage;
DWORD biXPeIsPerMeter;
DWORD biYPeIsPerMeter;
DWORD biCIrUsed;
DWORD biClrImprotant;
} BITMAPINFOHEADER;
/**** The RGB data of bmp file 图像RGB数据*****/
typedef struct tagRGBDATA{
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
} RGBDATA;
int main(int argc, char *argv[])
{
RGBDATA *bmpData=NULL; //图像数据指针
FILE *fp; //BMP文件指针
FILE *fq;
// long i,j,k;
long width=120; //图像宽度
long height=120; //图像高度
long dataSize=width*height;
BITMAPFILEHEADER bmfHeader;
BITMAPINFOHEADER bmiHeader;
int i, len;
unsigned char BM[100];
char str[200];
if(argc<2)
{
printf<