一、练习题
用fwrite 和 fseek功能,将一张bmp格式的图片更改成 德国国旗
#include <stdio.h>
int main(int argc, const char *argv[])
{
FILE* fp = fopen(argv[1],"r");
fseek(fp,2,SEEK_SET);
int bmp_size = 0;
fread(&bmp_size,4,1,fp);
printf("图片大小为:%d\n",bmp_size);
int bmp_w = 0;
int bmp_h = 0;
fseek(fp,18,SEEK_SET);
fread(&bmp_w,4,1,fp);
fread(&bmp_h,4,1,fp);
printf("图像像素信息为:%d * %d\n",bmp_w,bmp_h);
fclose(fp);
FILE *fp1 = fopen(argv[1],"r+");
unsigned char bgr[3][3] = {{0,0,0},{0,0,255},{0,255,255}};
fseek(fp1,54,SEEK_SET);
for(int i=0;i<bmp_w;i++){
for(int j=0;j<bmp_h/3;j++){
fwrite(bgr[2],3,1,fp1);
}
}
for(int i=0;i<bmp_w;i++){
for(int j=bmp_h/3;j<bmp_h/3*2;j++){
fwrite(bgr[1],3,1,fp1);
}
}
for(int i=0;i<bmp_w;i++){
for(int j=bmp_h/3*2;j<bmp_h;j++){
fwrite(bgr[0],3,1,fp1);
}
}
fclose(fp1);
return 0;
}