嵌入式3-29

今日作业:用fwrite 和 fseek功能,将一张bmp格式的图片更改成 德国国旗
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
typedef unsigned char bgr3;
int main(int argc, const char *argv\[\])
{
FILE* fp = fopen("./photo.bmp","r");
fseek(fp,2,SEEK_SET);
int bmp_size = 0;
fread(&bmp_size,4,1,fp);
printf("图片大小为:%d\nkb",bmp_size);
int bmp_w = 0;
int bmp_h = 0;
//从头往后偏移18个字节,定位存储宽度的的内存上
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);
fp = fopen("./photo.bmp","r+");
//准备一个3字节内存,用来表示bgr像素点信息
bgr c1={0,0,0};
bgr c2={0,0,230};
bgr c3={0,200,230};
//偏移54个字节,让光标定位在存放像素点的首地址上
fseek(fp,54,SEEK_SET);
// int count=bmp_w*bmp_h/3;
// fwrite(c1,3,count,fp);
// fwrite(c2,3,bmp_w * bmp_h/3,fp);
// fwrite(c3,3,bmp_w * bmp_h/3,fp);
for(int i=0;i<bmp_w;i++)
{
for(int j=0;j<=bmp_h/3;j++){
fwrite(c3,3,1,fp);
}
}
for(int i=0;i<bmp_w;i++)
{
for(int j=0;j<=bmp_h/3;j++){
fwrite(c2,3,1,fp);
}
}
for(int i=0;i<=bmp_w;i++)
{
for(int j=0;j<bmp_h/3;j++){
fwrite(c1,3,1,fp);
}
}
fclose(fp);
return 0;
}

相关推荐
liang899916 小时前
Anconda常用命令
linux·人工智能·conda
无足鸟ICT16 小时前
【RHCA+】管道符
linux·运维·服务器
老约家的可汗16 小时前
Linux的库制作和原理
linux·运维·服务器
捷瑞电子工坊17 小时前
C语言联合体(Union)——让同一块内存“变脸”
c语言·union·联合体·内存共享
非鱼䲆鱻䲜17 小时前
CCS 20.5.0的printf重定向串口怎么实现?
linux·单片机·电赛·ccs
左手厨刀右手茼蒿17 小时前
PCIe设备驱动开发:从枚举到DMA传输的完整链路
linux·嵌入式·系统内核
济61717 小时前
I.MX6U Linux 驱动开发篇---零基础必看!中断实验(按键中断 + 定时器消抖 + 设备树配置实战教程)--- Ubuntu20.04
linux·驱动开发·嵌入式·嵌入式linux驱动开发
seven_stars_17 小时前
CVE-2018-19518PHP漏洞
linux·浏览器·kali
浅止菌18 小时前
嵌入式设备ping不通?tcpdump 5分钟找到凶手,比加printf快10倍
linux
Amonter18 小时前
TB-RK3399Pro移植ubuntu 26.04及烧录
linux·ubuntu·rockchip·rk3399pro