用fwrite 和 fseek功能,将一张bmp格式的图片更改
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
FILE* fp = fopen("rising_freedom.bmp","r");fseek(fp,2,SEEK_SET);
int bmp_size = 0;
fread(&bmp_size,4,1,fp);
printf("文件大小为 %d 字节\n",bmp_size);int w = 0,h = 0;
fseek(fp,18,SEEK_SET);
fread(&w,4,1,fp);
fread(&h,4,1,fp);
printf("图像尺寸为:%d * %d\n",w,h);fclose(fp);
fp = fopen("rising_freedom.bmp","r+");
fseek(fp,54,SEEK_SET);
// bmp 图片默认像素格式是 bgr的
/* unsigned char pix1[3] = {0,0,0};
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
fwrite(pix1,3,1,fp);
}
}
*/
/* unsigned char pix2[3] = {0,255,255};for(int i=0;i<590;i++){
for(int j=0;j<w;j++){
fwrite(pix2,3,1,fp);
}
}
*/
unsigned char pix3[3] = {0,0,255};//红
for(int i=295;i<590;i++){
for(int j=0;j<w;j++){
fwrite(pix3,3,1,fp);
}
}unsigned char pix2[3] = {0,255,255};//黄
for(int i=0;i<295;i++){
for(int j=0;j<w;j++){
fwrite(pix2,3,1,fp);
}
}
unsigned char pix1[3] = {0,0,0};
for(int i=590;i<h;i++){
for(int j=0;j<w;j++){
fwrite(pix1,3,1,fp);
}
}fclose(fp);
return 0;
}