C语言实现Bmp文件的读入和剪裁

将一幅1280*1024的图像进行读入和居中剪裁


博客已转移至个人网站(http://www.p-chao.com)


读入 0.bmp 文件,生成 1.bmp 文件


#define X_Source 1280
#define Y_Source 1024

#define X_SIZE 640
#define Y_SIZE 512

#define Win_X 320
#define Win_Y 256

#include<stdio.h>

int image_read(unsigned char bitHead[54],unsigned char color[1024],unsigned char *data,char *filename)
{
	FILE *fp;
	fp = fopen(filename,"rb");
	if(fp == NULL) return -1;
	else{
		fread(bitHead,1,54,fp);
		fread(color,1,1024,fp);
		fread(data, (size_t)X_SIZE,(size_t)Y_SIZE,fp);
		fclose(fp);
		return 0;
	}
}

void SaveBmp(char* filename,unsigned char *data,int x_size,int y_size)
{
	int i;

	unsigned char color[1024];
	  unsigned int size ;
	   unsigned short head[27];
	   FILE* fp;
	for(i=0;i<1024;i++)
	{
		if(i%4==3)
			color[i]=0xff;
		else
			color[i]=i/4;
	}
	color[396]=145,color[397]=44;color[398]=238;
	 size = x_size*y_size+54+1024;
	 head[0]=0x4D42;
	 head[1]=size%0x10000;
	 head[2]=size/0x10000;
	 head[3]=0;
	 head[4]=0;
	 head[5]=0x436;
	 head[6]=0;
	 head[7]=0x28;
	 head[8]=0;
	 head[9]=x_size%0x10000;
	 head[10]=x_size/0x10000;
	 head[11]=y_size%0x10000;
	 head[12]=y_size/0x10000;
	 head[13]=0x1;
	 head[14]=0x08;
	 head[15]=0;
	 head[16]=0;
	 head[17]=0;
	 head[18]=0;
	 head[19]=0;
	 head[20]=0;
	 head[21]=0;
	 head[22]=0;
	 head[23]=0x100;
	 head[24]=0;
	 head[25]=0x100;
	 head[26]=0;

   fp=fopen(filename,"wb");
    if(!fp)return;
    fwrite(head,1,sizeof(head),fp);
	fwrite(color,1,1024,fp);
    fwrite(data,x_size,y_size,fp);
    fclose(fp);
}

void imwindow(unsigned char pic[Y_Source][X_Source],unsigned char picinv[Y_SIZE][X_SIZE])
{
	int i,j,a,b;
	for(i=0;i<X_SIZE;i++)
	{
		picinv[0][i]=0;
	}
	for(i=1;i<Y_SIZE;i++)
	{
		picinv[i][0]=0;
		picinv[i][X_SIZE-1]=0;
	}
	for(i=1;i<Y_SIZE;i++)
		for(j=1;j<X_SIZE-1;j++)
		{
			a=i+Win_Y;
			b=j+Win_X;
			picinv[i][j]=pic[a][b];
		}
/*	for(i=1;i<Y_SIZE;i++)
		for(j=1;j<X_SIZE-1;j++)
		{
			picinv[i][j]=pic[X_SIZE-j-1][i];
		}*/
}

void main()
{
	unsigned char imagein[Y_Source][X_Source];
	unsigned char imageout[Y_SIZE][X_SIZE];
	unsigned char bitHead[54];
	unsigned char color[1024];
	image_read(bitHead,color,imagein,"0.bmp");
	imwindow(imagein,imageout);
	SaveBmp("1.bmp",imageout,X_SIZE,Y_SIZE);
}


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值