Newer
Older
/*
// Created by Tiny on 2/16/2021.
*/
#include "map.h"
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
int initmap(MAP *map,char *path){
int lenpath = strlen(path); //get the path lenght
map->path = (char *)malloc((lenpath)*sizeof(char)); //allocate the path
strcpy(map->path,path); //copy the path given to map's path
map->functional = maptomatrix(map); //fill the map's functional matrix
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
int **maptomatrix(MAP *map){
char identity[2] ;
unsigned char color[3];
uint32_t file_size;
char application_id[4] ;
uint32_t raster_address;
uint32_t size_DIBHeader;
uint32_t image_width;
uint32_t image_height;
uint16_t nbColorPlanes;
uint16_t nbBitPerPixel;
uint32_t typeCompression;
uint32_t size_raw_image;
int32_t hResolution;
int32_t vResolution;
uint32_t nbUsedColours;
uint32_t nbImportantColours;
int linematrix;
int colummatrix;
int rmalloc,cmalloc;
int **fonc ;
int i;
FILE *bin;
printf("Open : %s \n",map->path);
if(!(bin=fopen(map->path,"rb"))){
puts("Error to open the map !");
return 0;
}
//Read Every Information of Map
fread(identity,sizeof(identity),1,bin);
fread(&file_size,sizeof(file_size),1,bin);
fread(application_id,sizeof(application_id),1,bin);
fread(&raster_address,sizeof(raster_address),1,bin);
fread(&size_DIBHeader,sizeof(size_DIBHeader),1,bin);
fread(&image_width,sizeof(image_width),1,bin);
fread(&image_height,sizeof(image_height),1,bin);
fread(&nbColorPlanes,sizeof(nbColorPlanes),1,bin);
fread(&nbBitPerPixel,sizeof(nbBitPerPixel),1,bin);
fread(&typeCompression,sizeof(typeCompression),1,bin);
fread(&size_raw_image,sizeof(size_raw_image),1,bin);
fread(&hResolution,sizeof(hResolution),1,bin);
fread(&vResolution,sizeof(vResolution),1,bin);
fread(&nbUsedColours,sizeof(nbUsedColours),1,bin);
fread(&nbImportantColours,sizeof(nbImportantColours),1,bin);
cmalloc = image_width;
rmalloc = image_height;
fonc = (int **)malloc(rmalloc * sizeof(int *));
for(i=0;i<rmalloc;i++)
{
fonc[i] = (int *)malloc(cmalloc*sizeof(int));
}
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
//get map height and width
map->height = image_height;
map->width = image_width;
//fill the functional matrix
linematrix = image_height -1;
colummatrix = 0;
for(i = 0 ; i < image_height*image_width ; i++){
fread(color,sizeof(color),1,bin);
if(color[2] == 255 && color[1] == 0 && color[0] == 0)
{
fonc[linematrix][colummatrix] = 2;
}
else if (color[2] == 0 && color[1] == 255 && color[0] == 0)
{
fonc[linematrix][colummatrix] = 1;
}
else {
fonc[linematrix][colummatrix] = 0;
}
if(colummatrix<image_width-1) colummatrix ++;
else {
colummatrix = 0;
linematrix --;
}
}
return fonc;
}