-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.c
151 lines (105 loc) · 4.73 KB
/
main.c
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/*
* auteur 1: Alabdulwahhab Ali
* Link to github repository: https://github.com/ALi-Natiq/BMP_Inverteren
*
*Bron vermeldingen:
*http://www.ece.ualberta.ca/~elliott/ee552/studentAppNotes/2003_w/misc/bmp_file_format/bmp_file_format.htm
*https://gitlab.com/cp2_arduino_8x8ledmatrix/cp2_bmp_edit
*https://stackoverflow.com/questions/31608867/about-bmp-file-how-can-i-write-change-a-pixel-color-in-c
*/
#include <stdio.h>
#include <stdlib.h>
#define BESTAND "C:\\download.bmp" // De locatie waar de originele BMP file staat op je computer vervolgt bij zijn naam
void Data(FILE*,FILE*,int*,int*); // Deze functie koppieërd de header naar de nieuwe file.
void InversData(FILE*,FILE*,int); // Deze functie inverteerd de kleuren.
void GrooteAfbeelding(FILE*,FILE*,int*,int*); // Deze functie berekend de oppervlakte van de BMP file.
int main(void)
{
int teller=0;
int lengte = 0;
int *d = NULL;
int *e = NULL;
FILE *pointer = NULL; // Deze opent de input file.
pointer = fopen(BESTAND,"rb");
FILE *invers = fopen("invers.bmp","wb"); // Zal het geïnverteerde bestand aanmaken met de naam "invers".
int a = 0;
if(pointer == NULL) // Als de file pointer een null geeft zal de programma stoppen met werken.
{
printf("File werd niet geopend.\n");
exit(EXIT_FAILURE);
}
printf("File werd geopend , karakters worden nu ingelezen\n\n");
Data(pointer,invers,d,e); // verwijzing naar de functie data
InversData(BESTAND,invers,54);
return 0;
}
void Data(FILE *bestand,FILE *nieuwebestand, int *y, int *w)
{
int teller = 0;
int a = 0;
int array[54];
int *g = NULL ;
int *h = NULL ;
g = (int*)malloc(sizeof(int)); // De pointers hebben nu een plaats gereserveerd in de heap memory.
h = (int*)malloc(sizeof(int));
for (int i = 0; i < 54; i++)
{
a = fgetc(bestand); // Leest de karakters één per één.
fputc(a,nieuwebestand); // Zet de gelezen karakters in de nieuwe file.
teller++;
array[i] = a;
}
printf("De eerste 2 waardes zijn %c en %c \n",array[0],array[1]);
if (array[0] != 66 && array[1] != 77) // Als de waardes van de arrays niet 66 en 77 zijn is het geen BMP file.
{
printf("Type file klopt niet. Einde programma\n");
exit(EXIT_FAILURE);
}
else if(array[18] == 44 && array[22] == 44)
{
printf("Breedte en lengte is te klein, verander het alstublieft\nEinde programma.\n");
exit(EXIT_FAILURE);
}
else
{
printf("Het is een BMP file.\n");
}
g = &array[18]; // De string op plaats 18 en 22 zitten nu in de heap memory.
h = &array[22];
GrooteAfbeelding(bestand ,nieuwebestand,g,h);
fclose(bestand);
fclose(nieuwebestand);
free(g);// Deallocatie geheugen van de pointer.
free(h);
}
void GrooteAfbeelding(FILE*originele,FILE* hallo ,int *c , int *z)
{
int lengte =0;
printf("Breedte pixels is %d\n",*c);
printf("Hoogte pixels is %d\n",*z);
lengte = ((*c)*(*z)*4)+54;
printf("Oppervlakte afbeelding = %d\n",lengte); // Standaard formule voor het berekenen van de omtrek.
InversData(originele,hallo,lengte);
}
void InversData(FILE *origineel,FILE* nieuw, int lang)
{
int a = 0;
int *d = NULL;
for (int i = 54; i < lang; i++)
{
d = (int*)malloc(sizeof(int));
a = fgetc(origineel);
a = ~a; // Karakters worden eerst geïnverteerd voordat ze in de file gezet wordt.
d = &a;
fputc(a,nieuw);
}
free(d);
fclose(origineel);
fclose(nieuw);
printf("De afbeelding is met succes aangemaakt. Einde programma\n");
}
/*
*Deze programma veranderd de kleuren van een BMP file;
*@param = FILE *pointer.
*@return = is void.
*/