forked from Arius1044/BmpEncoder_pro
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathBMP.cpp
More file actions
105 lines (73 loc) · 2.39 KB
/
Copy pathBMP.cpp
File metadata and controls
105 lines (73 loc) · 2.39 KB
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
#include "BMP.h"
#include "RGB.h"
#include <iostream>
#include <fstream>
#include "Header.h"
using namespace std;
int BMP::Tcode(int byte)
{
int copy_mask = File_INFO.S_Mask;
int mask_shift = 0;
while (!(copy_mask & 1)) {
copy_mask >>= 1;
mask_shift++;
}
return (byte & File_INFO.S_Mask) >> mask_shift;
}
BMP::BMP(char* _way_)
{
file_image.seekg(14);
file_image.read((char*)&File_INFO.Size, sizeof(File_INFO.Size));
file_image.read((char*)&File_INFO.Width, sizeof(File_INFO.Width));
file_image.read((char*)&File_INFO.Height, sizeof(File_INFO.Height));
File_INFO.Count_of_Canals = 3;
File_INFO.Bits_on_Color = 8;
File_INFO.S_Mask = 255;
file_image.seekg(54);
pixels = new RGB *[File_INFO.Height];
for (int i = 0; i < File_INFO.Height; i++)
pixels[i] = new RGB[File_INFO.Width];
int line_Padding = 2;
int code;
for (int i = 0; i < File_INFO.Height; i++)
{
for (int j = 0; j < File_INFO.Width; j++)
{
file_image.read((char*)&code, 1);
pixels[i][j].c_B = Tcode(code);
file_image.read((char*)&code, 1);
pixels[i][j].c_G = Tcode(code);
file_image.read((char*)&code, 1);
pixels[i][j].c_R = Tcode(code);
}
file_image.seekg(line_Padding, ios::cur);
}
file_image.close();
}
void BMP::get_info() const
{
cout << "________________________________________________________________________________" << endl;
cout << " | INFO | " << endl;
cout << "________________________________|___________|___________________________________" << endl;
cout << "Size: " << File_INFO.Size << endl;
cout << "Height: " << File_INFO.Height << endl;
cout << "Width: " << File_INFO.Width << endl;
cout << "Canals on a pixel: " << File_INFO.Count_of_Canals << endl;
cout << "Bits on a color: " << File_INFO.Bits_on_Color<<endl;
cout << "________________________________|___________|___________________________________" << endl;
cout << "PIXELS: \n\n";
for (int i = 0; i < File_INFO.Height; i++)
{
for (int j = 0; j < File_INFO.Width; j++)
{
cout << pixels[i][j].c_R << " " << pixels[i][j].c_G << " " << pixels[i][j].c_B << " " << endl;
}
cout <<"_____________________"<< endl;
}
}
BMP::~BMP()
{
for (int i=0; i<File_INFO.Height; i++)
delete[] pixels[i];
delete[] pixels;
}