练习题:使用fwrite、fread、fseek将一个图片转变成德国国旗
#include <myhead.h>
// 德国国旗 黑-红-金
int main(int argc, char const *argv[])
{
FILE *fp = fopen("./1.bmp", "r+");
int image_size = 0, color_size = 0;
int pexi_bit = 0, pexiNum = 0;
fseek(fp,2,SEEK_SET);
fread(&image_size, 4, 1, fp);
color_size = image_size - 54;
printf("image_size == %d\n", image_size);
fseek(fp,0x1c,SEEK_SET);
fread(&pexi_bit, 2, 1, fp);
printf("pexi_Byte == %d\n", pexi_bit/8);
pexiNum = color_size/(pexi_bit/8);
unsigned char black[3] = {0,0,0};
unsigned char red[3] = {0,0,255};
unsigned char gold[3] = {0,204,255};
fseek(fp,0x36,SEEK_SET);
for (int i =1 ; i <= pexiNum/3; i++)
{
fwrite(gold,3,1,fp);
}
for (int i =1 ; i <= pexiNum/3; i++)
{
fwrite(red,3,1,fp);
}
for (int i =1 ; i <= pexiNum/3; i++)
{
fwrite(black,3,1,fp);
}
fclose(fp);
return 0;
}
图片示意图:
思维导图:
![]()