-
Notifications
You must be signed in to change notification settings - Fork 0
/
fileHandling.cpp
85 lines (72 loc) · 2.18 KB
/
fileHandling.cpp
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
#include "fileHandling.hpp"
PGMFile::PGMFile(std::string filename){
std::streampos size;
std::string pgm_type, dimension, levels;
std::string line;
std::ifstream myfile (filename);
//int image_begin;
if (myfile.is_open())
{
getline (myfile, this->pgm_type);
getline (myfile, this->dimensions);
getline (myfile, this->levels);
myfile.close();
}
//image_begin = pgm_type.size() + dimension.size() + levels.size() + 3;
std::ifstream file (filename, std::ios::binary);
/*
if (file.is_open())
{
size = file.tellg();
this->image_data = new char [size];
file.seekg (15, std::ios::beg); //1s is hardcoded, each image can have a different image begin value. Should refactor
file.read (this->image_data, size);
file.close();
}
*/
/*Open the stream in binary mode.*/
std::ifstream bin_file(filename, std::ios::binary);
if (bin_file.good()) {
/*Read Binary data using streambuffer iterators.*/
std::vector<uint8_t> v_buf((std::istreambuf_iterator<char>(bin_file)), (std::istreambuf_iterator<char>()));
this->image_data = v_buf;
bin_file.close();
}
}
std::string PGMFile::getPgmType(){
return this->pgm_type;
}
std::string PGMFile::getDimensions(){
return this->dimensions;
}
int PGMFile::getWidth(){
std::string width = "";
for (auto el : this->dimensions){
if(el != ' ')
width += el;
else
break;
}
return std::stoi(width);
}
int PGMFile::getHeight(){
std::string height = "";
int space_flag = 0;
for (auto el : this->dimensions) {
if (space_flag)
height += el;
if(el == ' ')
space_flag = 1;
}
return std::stoi(height);
}
std::string PGMFile::getLevels(){
return this->levels;
}
std::vector<uint8_t> PGMFile::getImageData(){
return this->image_data;
}
void reshapeVector(std::vector<std::vector<int>> &matrix, std::vector<int> vec, int K, int L){
for (int i = 0; i < K * L; i++)
matrix.at(i / L).at(i % L) = vec.at(i);
}