打造你的专属印章(c语言)

制作原理

我们看到屏幕上显示的汉字的字型有两种表达方式:一种称为矢量方式,一种称为点阵方式。其中的点阵方式较为简单,其原理就是好比:铺地砖。有的铺为白色,有的铺为黑色,只要精心安排,就会组成我们希望的图案,当然也可以是汉字。

瓷砖越多,铺出的图案效果越细腻,这就是点阵的规模。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[
  • 18
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值