#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;
int main(int argc, const char *argv[])
{
FILE* fp = fopen("./rising_freedom1.bmp", "r");
int bmp_size = 0;
int bmp_w = 0;
int bmp_h = 0;
fseek(fp, 2, SEEK_SET);
fread(&bmp_size, 4, 1, fp);
printf("图片大小:%d\n", bmp_size);
fseek(fp, 18, SEEK_SET);
fread(&bmp_w, 4, 1, fp);
fread(&bmp_h, 4, 1, fp);
printf("像素:%dx%d\n", bmp_w, bmp_h);
//输出这个图片的第一个像素点和最后一个像素点bgr
fseek(fp, 54, SEEK_SET);
unsigned char bgr[3];
fread(bgr, 3, 1, fp);
printf("第一个像素点:b=%d g=%d r=%d\n", bgr[0], bgr[1], bgr[2]);
fseek(fp, 54, SEEK_SET);
for (int i = 0; i < bmp_w; i++)
{
for (int j = 0; j < bmp_h; j++)
{
fread(bgr, 3, 1, fp);
}
}
printf("最后一个像素点:b=%d g=%d r=%d\n", bgr[0], bgr[1], bgr[2]);
fclose(fp);
//修改图片大小,宽度*2,高度*2,像素点数量*4,使用黑色填充
fp = fopen("./rising_freedom1.bmp", "r");
FILE* rfp = fopen("./new1.bmp", "r+");
//新图片置黑
fseek(rfp, 54, SEEK_SET);
unsigned char b[3] = {0, 0, 0};
for (int i = 0; i <= bmp_w; i++)
{
for (int j = 0; j <= bmp_h; j++)
{
fwrite(b, 3, 1, rfp);
}
}
//尺寸变大两倍
fseek(rfp, 2, SEEK_SET);
fread(&bmp_size, 4, 1, rfp);
printf("%d ", bmp_size);
int nbmp_size = bmp_size*4;
fseek(rfp, 2, SEEK_SET);
fwrite(&nbmp_size, 4, 1, rfp);
printf("%d", nbmp_size);
int nbmp_w = bmp_w*2;
int nbmp_h = bmp_h*2;
fseek(rfp, 18, SEEK_SET);
fwrite(&nbmp_w, 4, 1, rfp);
fwrite(&nbmp_h, 4, 1, rfp);
//拷贝原先图片到新图片中
fseek(fp, 54, SEEK_SET);
fseek(rfp, 54, SEEK_SET);
unsigned char a[3] = {0};
for (int i = 0; i <= bmp_w; i++)
{
for (int j = 0; j <= bmp_h; j++)
{
fread(a, 3, 1, fp);
fwrite(a, 3, 1, rfp);
}
}
fclose(rfp);
fclose(fp);
//修改德国国旗
fp = fopen("./rising_freedom2.bmp","r+");
fseek(fp, 18, SEEK_SET);
fread(&bmp_w, 4, 1, fp);
fread(&bmp_h, 4, 1, fp);
fseek(fp, 54, SEEK_SET);
unsigned char bgr1[3] = {0, 255, 255} ;//定义黄色bgr
for (int i = 0; i < bmp_w; i++)
{
for (int j = 0; j <= bmp_h/3; j++)
{
fwrite(bgr1, 3, 1, fp);
}
}
unsigned char bgr2[3] = {0, 0, 255} ;//定义红色bgr
for (int i = 0; i < bmp_w; i++)
{
for (int j = 0; j <= bmp_h/3; j++)
{
fwrite(bgr2, 3, 1, fp);
}
}
unsigned char bgr3[3] = {0, 0, 0} ;//定义黑色bgr
for (int i = 0; i < bmp_w; i++)
{
for (int j = 0; j <= bmp_h/3; j++)
{
fwrite(bgr3, 3, 1, fp);
}
}
fclose(fp);
return 0;
}
20240806 作业
最新推荐文章于 2024-10-14 16:55:09 发布