使用fwrite、fread将一张随意的bmp图片,修改成德国的国旗
#include <stdio.h>
#include <stdint.h>
#define BMP_HEADER_SIZE 54
#define PIXEL_DATA_OFFSET 54
int main() {
FILE *inputFile = fopen("input.bmp", "rb");
FILE *outputFile = fopen("output.bmp", "wb");
if (inputFile == NULL || outputFile == NULL) {
printf("Error opening files.\n");
return 1;
}
uint8_t header[BMP_HEADER_SIZE];
fread(header, sizeof(uint8_t), BMP_HEADER_SIZE, inputFile);
fwrite(header, sizeof(uint8_t), BMP_HEADER_SIZE, outputFile);
fseek(inputFile, 0, SEEK_END);
long fileSize = ftell(inputFile);
fseek(inputFile, PIXEL_DATA_OFFSET, SEEK_SET);
uint8_t pixelData[fileSize - PIXEL_DATA_OFFSET];
fread(pixelData, sizeof(uint8_t), fileSize - PIXEL_DATA_OFFSET, inputFile);
for (int i = 0; i < (fileSize - PIXEL_DATA_OFFSET)/3; i += 3) {
pixelData[i] = 0;
pixelData[i + 1] = 0;
pixelData[i + 2] = 0;
}
for (int i = (fileSize -PIXEL_DATA_OFFSET)/3; i < (fileSize - PIXEL_DATA_OFFSET)/3*2; i += 3) {
pixelData[i] = 0;
pixelData[i + 1] = 0;
pixelData[i + 2] = 255;
}
for (int i = (fileSize-PIXEL_DATA_OFFSET)/3*2; i < (fileSize - PIXEL_DATA_OFFSET); i += 3) {
pixelData[i] = 0;
pixelData[i + 1] = 255;
pixelData[i + 2] = 255;
}
fwrite(pixelData, sizeof(uint8_t), fileSize - PIXEL_DATA_OFFSET, outputFile);
fclose(inputFile);
fclose(outputFile);
return 0;
}
使用提供的getch函数,编写一个专门用来输入密码的函数,要求输入密码的时候,显示 * 号,输入回车的时候,密码输入结束
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
int getch() {
int c = 0;
struct termios org_opts, new_opts;
int res = 0;
res = tcgetattr(STDIN_FILENO, &org_opts);
assert(res == 0);
new_opts = org_opts;
new_opts.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO, TCSANOW, &new_opts);
c = getchar();
res = tcsetattr(STDIN_FILENO, TCSANOW, &org_opts);
assert(res == 0);
return c;
}
char* getPassword() {
char* password = (char*)malloc(100 * sizeof(char));
if (!password) {
printf("内存分配失败\n");
exit(1);
}
int i = 0;
char c;
printf("请输入密码(按回车键结束):");
while (1) {
c = getch();
if (c == '\n') {
break;
} else {
password[i] = c;
printf("*");
i++;
}
}
printf("\n");
return password;
}
int main() {
char* password = getPassword();
printf("您输入的密码是:%s\n", password);
free(password);
return 0;
}
本文介绍了如何使用C语言中的fwrite和fread函数读取和修改BMP图片文件,将其转换为德国国旗,并通过getch函数实现密码输入时的星号隐藏功能。
76

被折叠的 条评论
为什么被折叠?



