Преобразование изображение к черно-белому цвету

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
const char *OLD_BMP_IMAGE = "/Users/BagzBanny/Downloads/4.1.02.bmp";
const char *NEW_BMP_IMAGE = "/Users/BagzBanny/Downloads/new.bmp";
FILE *fin, *fout;
if ((fin = fopen(OLD_BMP_IMAGE, "r")) == NULL) {
cout << "Error open file for change" << endl;
return 1;
}
if ((fout = fopen(NEW_BMP_IMAGE, "w")) == NULL) {
cout << "Error create new file" << endl;
return 1;
}
unsigned char *bufferInfo = new unsigned char[55];
fread(bufferInfo, sizeof(char), 54, fin);
fwrite(bufferInfo, sizeof(char), 54, fout);
delete []bufferInfo;
fseek(fin, 54, SEEK_SET);
while (!feof(fin)) {
unsigned char R = fgetc(fin), G = fgetc(fin), B = fgetc(fin);
unsigned char buffer = 0.3*R+0.59*G+0.11*B; /* Можешь поменять на 0.33 все числа,
это параметры, при этих выгляджит лучше */
if (buffer > 255)
buffer = 255;
fputc(buffer, fout);
fputc(buffer, fout);
fputc(buffer, fout);
}
fclose(fin);
fclose(fout);
return 0;
}