自己名字印章

 /*********************************************************************************
 ****  FileName:  demo.c
 ****  Function:  真彩色bmp图片文件的创建
 ****  Usage:     demo  xxxx.bmp
 ****  Author:    xiangdesheng
 ****  Date:      2022-02-24
 *********************************************************************************/
#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)=16
typedef 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;

int main(int argc, char *argv[])
{
	RGBDATA *bmpData=NULL;	//图像数据指针
	FILE *fp;				//BMP文件指针
	long i,j,k;
	long width=128;			//图像宽度
	long height=128;		//图像高度
	long dataSize=width*height;
	BITMAPFILEHEADER bmfHeader;
	BITMAPINFOHEADER bmiHeader;

	if(argc<3)
	{
		printf("\n    请指定您要生成的BMP文件名!\n");
		printf("\n    方法1:在cmd窗口输入: demo xxx.txt 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             日期:2022年2月24日                 \n");
	printf("\n             目的:编制印章生成程序时,供参考!       \n");
	printf("\n             功能:根据设定红绿蓝三色分量的值,控制显示不同的彩色条纹!\n\n");
	printf("\n    ********************************************************************************\n\n");

    //第一步:用命令行中给出的文件名新建一BMP文件,此时还是一个空文件
    char a[300][300]; //定义一个bai二维数组
 int c=0;
   FILE *fp1;                                      /* 定义指向文件的指针*/
   if((fp1=fopen(argv[1],"r"))==NULL)              /*打开一个二进制文件,为读方式*/
   {
		printf("文件打开失败!\n");
		return 0;
   }
while(!feof(fp1))
{if(1!=fscanf(fp1,"%s",a[c]))
			break;
c++; //打印数据到二维数组中
}
char b[300][300];
int len1,m,k1=0,l;
len1=strlen(a[0]);
int j1,i1;
		for(i1=0;i1<c;i1++){
		k1=0;
		for(j1=0;j1<len1;j1++)
		{
			if(a[i1][j1]=='_')
			{b[i1][k1]='0';k1++;
			}
			if(a[i1][j1]=='X')
			{b[i1][k1]='1';k1++;
			}
			}
			b[i1][k1]=='\0';
			printf("%s\n",b[i1]);
		}
    len1=strlen(b[0]);
      //第一步:用命令行中给出的文件名新建一BMP文件,此时还是一个空文件

if((fp=fopen(argv[2], "wb+"))==NULL)
	{
		printf("Cannot open BMP file!");
		exit(0);
	}


	//第二步:置文件头数据并写入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, fp);

	//第三步:置信息头数据并写入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, fp);

	//第四步:置图像RGB数据并写入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++)
		{
			k=(height-i-1)*width + j;//计算bmp图片中第i行第j列图像数据在bmpData[]数组中的位置
			if(i>=(height-c)/2&&i<=(height/2+c/2)-1&&j>=(width-len1)/2&&j<=(width/2+len1/2)-1&&b[i-(height-c)/2][j-(width-len1)/2]=='0'  )
			{
				bmpData[k].rgbBlue=255;
				bmpData[k].rgbGreen=255;
				bmpData[k].rgbRed=255;
			}
			else //其他红色
				{
					bmpData[k].rgbBlue=0;
					bmpData[k].rgbGreen=0;
					bmpData[k].rgbRed=255;
				}
		}
	}

	fwrite(bmpData,sizeof(RGBDATA),dataSize,fp);//将bmpData所指内存中的RGB数据一次性写入BMP文件

	printf("\n    恭喜您!BMP文件已经成功生成!\n");
	printf("\n    请在当前目录下查看生成的BMP文件%s\n\n",argv[2]);

	free(bmpData);	//释放bmpData所指的内存空间
	bmpData=NULL;	//置bmpData为空指针
	fclose(fp);		//关闭fp所指文件

}

在这里插入图片描述

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值