-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfiles.h
More file actions
101 lines (94 loc) · 5.97 KB
/
files.h
File metadata and controls
101 lines (94 loc) · 5.97 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
#ifndef INF_FILES_H
#define INF_FILES_H
#include <stdio.h>
#include <string>
#include <fstream>
namespace bitMap {
struct BMPHeader { //Информация об изображении
unsigned int bfType;
unsigned long bfSize;
unsigned int bfReserved1;
unsigned int bfReserved2;
unsigned long bfOffBits;
};
struct BMPInfoHeader { //Информация об изображении
unsigned int biSize;
int biWidth;
int biHeight;
unsigned short biPlanes;
unsigned short biBitCount;
unsigned int biCompression;
unsigned int biSizeImage;
int biXPelsPerMeter;
int biYPelsPerMeter;
unsigned int biClrUsed;
unsigned int biClrImportant;
};
struct GreyCount { //Информация о каждом символе первичного алфавита и его кодах
unsigned int num;
unsigned char tone;
long double frq;
std::string uniformCodes;
std::string codeShannonFano;
std::string codeHuffman;
};
struct HuffmanTree{ //Дерево Хаффамана
long double frq;
int posAlb;
HuffmanTree *left;
HuffmanTree *right;
HuffmanTree ( HuffmanTree *l, HuffmanTree *r );
HuffmanTree ( long double f, int p, HuffmanTree *l, HuffmanTree *r );
};
struct Alphabet{ //Алфавит из значений символов
int num;
GreyCount *symbol;
};
}
enum typeOfCode{ //Типы кодов
UNIFORM, //Равномерный
HUFFMAN, //По Хаффману
SHANNON //По Шеннону-Фано
};
class BMP{
private:
bitMap::BMPHeader head;
bitMap::BMPInfoHeader headInfo;
unsigned char **field;
unsigned int shades[256];
bitMap::Alphabet *alphabet;
long double entropy;
protected:
unsigned short read_u16 ( FILE *fp ); //побитовое чтение 16 бит
unsigned int read_u32 ( FILE *fp ); //побитовое чтение 32 бит
int read_s32 ( FILE *fp ); //побитовое чтение 31 бита
std::string getBit ( int a ); //получение двоичного представления числа
std::string getUmCode ( int a, int n ); //получение равномерного кода числа
void buildingCodeShannonFano ( char lit, std::string code, int left, int right ); //построение кодов Шеннона-Фано
void buildingCodeHuffman (); //Построение кодов Хаффмана
void fun ( bitMap::HuffmanTree *node, std::string &code ); //Вспомогательная функция построения дерева Хаффмана
int correlation (int a); //Квантование
public:
BMP ( char * );
~BMP ();
void writeMatrix ( std::ofstream *out = nullptr ); //Вывод матрицы изображения
void writeInfo ( std::ofstream *out = nullptr ); //Вывод информации изображения
void writeFrequencyProbability ( std::ofstream *out = nullptr ); //Вывод вероятностоной частоты
void writeFrequency ( std::ofstream *out = nullptr ); //Вывод количественной частоты
unsigned long getBitSize (); //Получения значения информации об изображении
int getWidth (); //Получения значения информации об изображении
int getHeight (); //Получения значения информации об изображении
unsigned short getBitCount (); //Получения значения информации об изображении
unsigned int getCompression (); //Получения значения информации об изображении
unsigned int getSizeImage (); //Получения значения информации об изображении
int getXPelsPerMeter (); //Получения значения информации об изображении
int getYPelsPerMeter (); //Получения значения информации об изображении
unsigned int getClrUsed (); //Получения значения информации об изображении
unsigned int getClrImportant (); //Получения значения информации об изображении
long double getEntropy (); //Получения значения информации об изображении
long double byteSizeCode ( typeOfCode ); //Значение энтропии по Шеннону
long int sizeCode ( typeOfCode ); //Размер кода
void writeCodesOfMessage ( typeOfCode, std::ofstream *out = nullptr ); //Вывод закодированного сообщения
void writeCodesOfSymbols ( typeOfCode, std::ofstream *out = nullptr ); //Вывод кодов в соответствии с методом сжатия
};
#endif //INF_FILES_H