编程实现根据指定汉字生成电子印章
编程实现根据输入的汉字制作不同的电子印章
- 具体要求:
- 思路:
- 程序代码:
- CB运行结果:
- 使用流程:
- 第一步:首先在用户目录下建立不同字体的查询表,和空的 bmp 格式文件
- 第二步:Windows+R 运行cmd,
- 第三步:cmd总中输入三个参数,回车运行
- 第四步:根据提示输入要制作的印章,回车生成 bmp 印章
- 印章效果:
- 陌生函数:
- 字体表资源:
具体要求:
1)从键盘输入4个汉字,根据汉字的编码在隶书56点阵汉字字库文本文件LiShu56.txt中查找相应汉字的字型点阵信息,并将点阵信息存入数组。
2)建立印章文件XXX.bmp,按照BMP文件的格式写入文件头、信息头。
3)然后根据数组中的汉字点阵信息确定颜色数据写入XXX.bmp文件中。XXX.txt文件中的一个字符对应于XXX.bmp文件中一个彩色点的数据(包括蓝、绿、红三个字节数据,若是红色点,一般置B=0、G=0,R=255)
4)检查文件头、信息头、彩色数据是否符合BMP文件的格式规范,若规范,则在windows环境下可以正常浏览和使用该电子印章图片了。
5)隶书点阵文本文件LiShu56.txt和生成的印章文件XXX.bmp通过命令行参数给定。假如程序编译连接后生成的可执行文件名为mySeal.exe,则用LiShu56.txt制作印章XXX.bmp的命令为:mySeal LiShu56.txt XXX.bmp,执行该命令后输入“令狐冲印”4个汉字生成的红色印章如图4(a)所示。采用其它字体点阵文件生成的印章如图4(a)所示,
思路:
首先你需要输入想要制作的印章的汉字,要查表就要把汉字转化为十六进制的编码,然后把编码每四个分段,摘取每一段代码然后进入汉字表中查找,当你找到该汉字的编码时,编码下面的 56 行就是该汉字的表示,每一行有63个字符(56个__和X,还有7个,)遇到‘,’直接跳过,遇到__RGB赋值为白色,‘X’ 赋值为红色即可,剩下的就是代码实现了。
程序代码:
/******************************************************************************** FileName: demo.c**** Function: 真彩色bmp图片文件的创建**** Usage: demo xxxx.bmp*****************************************************************************/#include <conio.h>#include <stdlib.h>#include <stdio.h>#include <math.h>#include <malloc.h>#include <string.h>typedef unsigned char BYTE;typedef unsigned short WORD;typedef unsigned long DWORD;/**** The file header of bmp file 文件头*****/#include <pshpack2.h> //This file turns 2 byte packing of structures on, then sizeof(BITMAPFILEHEADER)=14, otherwise sizeof(BITMAPFILEHEADER)=16typedef struct tagBITMAPFILEHEADER
{WORD bfType;DWORD bfSize;WORD bfReserved1;WORD bfReserved2;DWORD bfoffBits;} BITMAPFILEHEADER;#include <poppack.h> //This file turns packing of structures off/**** 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;char str_key[4];
char str_col[120];int main(int argc, char *argv[])
{RGBDATA *bmpData=NULL; //图像数据指针FILE *fp1,*fp2; //BMP文件指针unsigned char BM[100];char str[200];long i,j,k;long width=120; //图像宽度long height=120; //图像高度long dataSize=width*height;BITMAPFILEHEADER bmfHeader;BITMAPINFOHEADER bmiHeader;if(argc<2){printf("\n 请指定您要生成的BMP文件名!\n");printf("\n 方法1:在cmd窗口输入: demo xxxx.bmp 后回车执行!\n");printf("\n 方法2:在VC的工程设置中添加参数: xxxx.bmp 后编译运行!\n");printf("\n 功能: 根据设定红绿蓝三色分量的值,控制显示不同的彩色条纹!\n\n");exit(0);}printf("\n ******************************************************************\n");printf("\n 感谢您使用BMP图片文件制作DEMO程序 \n");printf("\n 作者:张三 \n");printf("\n 日期:2020年6月12日 \n");printf("\n 目的:编制印章生成程序时,供参考! \n");printf("\n 功能:根据设定红绿蓝三色分量的值,控制显示不同的彩色条纹!\n\n");printf("\n ******************************************************************\n\n");//第一步:用命令行中给出的文件名新建一BMP文件,此时还是一个空文件//打开用windows + R ,cmd 打开两个的两个命令参数argv[1],argv[2]if(!(fp1 = fopen(argv[1], "wb+"))){printf("Cannot open BMP file!");exit(0);}if(!(fp2 = fopen(argv[2], "r"))){printf("Cannot open 字体.txt file!");exit(0);}//将编码转化为字符并显示,将汉字的编码转到str数组里,用于后续查找printf("请输入你想制作印章的汉字: ");scanf("%s",BM);int len;for(len = 0; BM[len] != '\0'; len++);for(i = 0; i < len; i++)printf("BM[%d] = %x\n",i,BM[i]);for(i = 0; i < len; i++)sprintf(str+2*i,"%x",BM[i]);printf("将编码转化为字符并显示 :%s\n",str);//第二步:置文件头数据并写入BMP文件bmfHeader.bfType=0x4d42;bmfHeader.bfSize=14+40+width*height*3;bmfHeader.bfReserved1=0;bmfHeader.bfReserved2=0;bmfHeader.bfoffBits=0x36;fwrite(&bmfHeader, sizeof(BITMAPFILEHEADER), 1, fp1);//第三步:置信息头数据并写入BMP文件bmiHeader.biSize=40;bmiHeader.biWidth=width;bmiHeader.biHeight=height;bmiHeader.biPlanes=1;bmiHeader.biBitCount=24;bmiHeader.biCompress=0;bmiHeader.biSizeImage=width*height*3;bmiHeader.biXPeIsPerMeter=0;bmiHeader.biYPeIsPerMeter=0;bmiHeader.biCIrUsed=0;bmiHeader.biClrImprotant=0;fwrite(&bmiHeader, sizeof(BITMAPINFOHEADER), 1, fp1);//第四步:置图像数据并写入BMP文件//分配足够内存,让bmpData指向这块内存,用于存放图像各象素点的RGB分量值if((bmpData=(RGBDATA*)malloc(width*height*3))==NULL){printf("bmpData memory malloc error!");}//先在bmpData所指内存中置图像RGB数据,然后将所有数据写入BMP文件for(i=0; i<height; i++) //边框设置为红色{for(j=0; j<width; j++){int k=(height-i-1)*width + j;//计算bmp图片中第i行第j列图像数据在bmpData[]数组中的位置if((i >= 0 && i <= 3)||(i >= 116 && i <= 119) || (j >= 0 && j <= 3) || (j >= 116 && j <= 119)){bmpData[k].rgbBlue = 0;bmpData[k].rgbGreen = 0;bmpData[k].rgbRed = 255;}else{bmpData[k].rgbBlue = 255;bmpData[k].rgbGreen = 255;bmpData[k].rgbRed = 255;}}}int dx[4] = {4,56,4,56};//为了安排四个字的位置,采用每个字做不同的偏移int dy[4] = {56,56,4,4};//(4,56)(56,56)(4,4)(56,4) 分别是第一二三四个字for(i = 0 ; i < 16; i += 4){strncpy(str_key, str + i, 4); //每次从str数组中截取4个字符串,进行匹配,在表中找到汉字rewind(fp2); //将指针置于文件头,从头开始寻找。while( !feof(fp2) ){fgets(str_col, sizeof(str_col)-1, fp2 ); //每次从汉字表中读取一行,放入stri中一定要-1把、0去掉if( strstr(str_col, str_key )) //匹配到汉字的编码{for(int w = 0; w < 56; ++w){fgets(str_col, sizeof(str_col)-1, fp2 ); //每次从汉字表中读取一行,放入stri中一定要-1把、0去掉int char_irl = 0; //标记不合法字符,遇到,跳过for( j = 0; j < 63; ++j ){int k = (height-w-1-dx[i/4])*width + j +dy[i/4]-char_irl;if(str_col[j] == ','){char_irl++;continue;}if(str_col[j] == 'X'){bmpData[k].rgbBlue = 0;bmpData[k].rgbGreen = 0;bmpData[k].rgbRed = 255;}else{bmpData[k].rgbBlue = 255;bmpData[k].rgbGreen = 255;bmpData[k].rgbRed = 255;}}}break;//找到了一个字,得跳出循环重新从第一行找起,省时间}}}fwrite(bmpData,sizeof(RGBDATA),dataSize,fp1);//将bmpData所指的RGB数据一次性写入BMP文件printf("\n 恭喜您!BMP文件已经成功生成!\n");printf("\n 请在当前目录下查看生成的BMP文件%s\n\n",argv[1]);free(bmpData); //释放bmpData所指的内存空间bmpData=NULL; //置bmpData为空指针fclose(fp1); //关闭fp所指文件fclose(fp2);}
CB运行结果:
使用流程:
第一步:首先在用户目录下建立不同字体的查询表,和空的 bmp 格式文件
第二步:Windows+R 运行cmd,
第三步:cmd总中输入三个参数,回车运行
第四步:根据提示输入要制作的印章,回车生成 bmp 印章
印章效果:
陌生函数:
字体表资源:
行楷
链接:https://pan.baidu.com/s/1rwVA8Djw90r79zv6rzC8PQ 提取码:l5d9隶书
链接:https://pan.baidu.com/s/1QL_FlQpw3TeqfV23uuYRJg 提取码:8b7d
汉字内码扩展规范(GBK)
链接:https://pan.baidu.com/s/1qMtdl9KLvFcdaegWCxYSqg 提取码:9xnm
本文借鉴JKR10000的博客,有很多改善,希望对你有帮助,谢谢 !
编程实现根据指定汉字生成电子印章相关推荐
- 问题 U: 任务3-1:编程实现根据指定文本生成电子印章(超详细教程)
hnuster!看了很多关于该题的解法但是我们发现,我们竟然下不了手!!!第一个问题:制作属于自己名字的txt(即xds.txt).这个都不会,可是网上的其他解法都一笔带过了,琢磨了半天弄清楚的. 下 ...
- 编程实现根据指定文本生成电子印章
在材料demo中有如下改动 1.通过hedit可以看到示例程序生成的图片的长宽参数都是00 00 00 80也就是8*16=128 在文件头的地方将长宽修改为128 2.因为要输入三个参数 且顺序为程 ...
- C#生成电子印章源码
C#生成电子印章源码 using System; using System.Collections.Generic; using System.ComponentModel; using System ...
- OpenCV后投影,利用阈值函数分割指定区域生成掩膜,通过直方图分布查找其他图像相同区域。
一.API函数 void mixChannels(const Mat* src,int nsrc,Mat* dst ,int ndst,const int* fromTo,size_t npairs) ...
- python读取excel指定列-Python读取excel指定列生成指定sql脚本的方法
需求 最近公司干活,收到一个需求,说是让手动将数据库查出来的信息复制粘贴到excel中,在用excel中写好的公式将指定的两列数据用update这样的语句替换掉. 例如: 有个A库,其中有两个A.01 ...
- Visual Studio 中指定自定义生成事件
自定义生成事件打开方式 通过指定自定义生成事件,可以在生成开始之前或在它完成之后自动运行命令.在Visual Studio中通过右键项目->属性 进入项目属性菜单. 自定义生成事件的语法 生成事 ...
- python读xml文件生成头文件_Python根据指定文件生成XML的方法
因项目需要根据指定格式的文件生成XML标注文件,可以方便使用LabelImg打开进行编辑和查看.其原始文件默认使用逗号进行分隔,如下所示: 第1个值:原始图片中切图小文件,以AIpng_x,其中x代表 ...
- python生成xml文件工具_Python根据指定文件生成XML的方法
因项目需要根据指定格式的文件生成XML标注文件,可以方便使用LabelImg打开进行编辑和查看.其原始文件默认使用逗号进行分隔,如下所示: 第1个值:原始图片中切图小文件,以AIpng_x,其中x代表 ...
- Linux系统编程:获取指定目录下指定文件类型的数量
分析 编程实现对指定目录下的指定文件类型数量的统计.这里涉及到对目录文件的打开和对目录文件下的文件的遍历. 这里主要用的2个库函数,打开目录的 opendir函数,readdir函数.对这2个库函数不 ...
最新文章
- hdu 1166 敌兵布阵
- 【PC工具】免费文库文档下载器,破解文库下载器,免费下载文库文档,文库下载器...
- async spring 默认线程池_Spring boot注解@Async线程池实例详解
- 栅格单元值的选取方法_计算机求解微分方程的六大数值计算方法
- c++ windows 光标操作_电脑操作常用快捷键
- 软件测试工程师如何编写一篇杀手级简历?
- iphone开发中图像处理相关要点
- 雷林鹏分享:jQuery EasyUI 数据网格 - 自定义排序
- Python多进程之Pool
- 刘宇凡:莫沉浮华,归于平凡
- VC++界面编程之--实现工具栏自定义皮肤
- 音箱高音测试电脑软件,BOSE MusicMonitor电脑扬声器晒单 使用体验_什么值得买
- 【破解工具】Hashcat加密破解工具
- three.js obj模型的mtl材质贴图不显示
- 小程序-手写签名(附代码)
- C++经典算法题-洗扑克牌(乱数排列)
- linux内核代码研读与实战,Linux内核源码研读与实战演练
- JavaScript获得字符串实际长度
- 欢迎进入夜色的繁星博客导航一站式搜索(所有博客的汇总帖)
- tmall.product.schema.add(淘宝天猫商品发布接口),淘宝商品发布API接口,tmall.product.schema.get产品信息获取接口
热门文章
- 【转】Braid - 一个发人深思的游戏
- 一个屌丝程序猿的人生(三十一)
- 【Python小程序】怀旧经典 | 特色玩法,代码版本的钢琴小游戏了解下?初学钢琴,能提高双手协调与反应能力哦~(源码分享)
- Linux开发:快速开发游戏的9个关键!
- Python实现最短路问题常见求解算法2——Label Correcting Algorithm(deque)
- 研究生期间如何做研究
- 视频剪辑软件怎么调声像和音量?
- 用苹果闲置手机做网站服务器,iPhone手机上搭建nodejs服务器步骤方法
- 航向的表示_飞机跑道上各种标识的含义
- 被Teamviewer 割韭菜后 我才发现我大国产远控软件真香