//将一张bmp图片,修改成德国国旗
int main(int argc, const char *argv[])
{
//用fwrite、fread等函数将一张mbp图片改称德国国旗
//获取图片大小、宽度、高度等信息
FILE* rfp = fopen("./bmptest.bmp","r");//打开./目录下testbmp.bmp文件
int bmp_size = 0; //分别定义变量存储图片的大小、高度、宽度
int bmp_hight = 0;
int bmp_width = 0;
fseek(rfp,0x02,SEEK_SET); //偏移文件光标至0x02位置,用于读取图片大小的数据
fread(&bmp_size,4,1,rfp);//从rfp指向的的文件读光标出读取1项数据,每1项数据是4个字节,保存到&bmp_size为首地址的内存中。
printf("该图片的大小为:%d字节\n",bmp_size);
fseek(rfp,0x12,SEEK_SET); //将文件光标偏移到记录图片宽度数据的地方
fread(&bmp_width,4,1,rfp);//读取图片宽度信息,写入到bmp_width里
fread(&bmp_hight,4,1,rfp);
printf("该图片像素信息为:%d * %d\n",bmp_width,bmp_hight);
fclose(rfp); //关闭已打开的文件
FILE* wfp = fopen("./bmptest.bmp","r+");//以可读可写的模式打开文件
fseek(wfp,0x36,SEEK_SET); //将光标移动到记录像素点的位置
unsigned char bgr_black[3] = {0,0,0};
unsigned char bgr_red[3] = {0,0,255};
unsigned char bgr_yellow[3] = {30,207,252};
for (int i=0;i<bmp_hight/3;i++)
{
for(int j=0;j<bmp_width;j++)
{
fwrite(bgr_yellow,3,1,wfp);
}
}
for (int i=bmp_hight/3;i<bmp_hight*2/3;i++)
{
for(int j=0;j<bmp_width;j++)
{
fwrite(bgr_red,3,1,wfp);
}
}
for (int i=bmp_hight*2/3;i<bmp_hight;i++)
{
for(int j=0;j<bmp_width;j++)
{
fwrite(bgr_black,3,1,wfp);
}
}
fclose(wfp);
return 0;
}