-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathjpegencode.h
More file actions
57 lines (47 loc) · 2.64 KB
/
jpegencode.h
File metadata and controls
57 lines (47 loc) · 2.64 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
#ifndef JPEGENCODE_H
#define JPEGENCODE_H
using namespace std;
#include "JPEGImage_global.h"
#include "interfaces/exportimportinterface.h"
#include <QFile>
#include <QList>
#include <QTime>
#include <math.h>
#include "component.h"
#include "huffmantable.h"
#include "exportpicture.h"
#include <fstream>
#include "imagestate.h"
class JpegEncode
{
public:
QuantizationTable QuantizationTableWriteProcessLuminance;
QuantizationTable QuantizationTableWriteProcessChrominance;
//QImage &exportImage;
//QString &fileName;
ExportPicture imageToExport;
void transformToYCbCr();
void FDCT(vector<vector<int> > &image, vector<int> &zigZagArray, int quantizationTable[8][8]);
void ZigZagCoding(vector<vector<double> > &block8x8,vector<int>&zigZagArray);
void ZigZagCoding(vector<vector<int> > &block8x8,vector<char>&zigZagArray);
void ZigZagCoding(int block8x8[8][8], vector<char>&zigZagArray);
char getCategoryOfDCTCoefficient(int x);
void generateCategoryFrequences(vector<int>&component,vector<int>&DCElementsFrequency,vector<int> &ACElementsFrequency,vector<char> &categoryByte,vector<short int>&valueByte);
void writeQuantizationTablesInFile(ofstream &file,vector<char> &table,int tableID);
void writeStartOfFileByteInFile(ofstream &file);
void writeBaselineDCTInformations(ofstream &file);
void writeHuffmanTables(ofstream &file,vector<char>&BITS,vector<int>&valuesDC,vector<char>&BITSA,vector<int>&valuesAC,bool isLuminance);
void writeScanHeaderMarker(ofstream &file);
void writeEOFMarker(ofstream &file);
void writeScanHeaderData(ofstream &file,vector<int>&luminanceCodesDC,vector<int>&luminanceCodesAC,vector<int>&luminanceLengthsDC,vector<int>&luminanceLengthsAC,vector<int>&chrominanceCodesDC,vector<int>&chrominanceCodesAC,vector<int>&chrominanceLengthsDC,vector<int>&chrominanceLengthsAC,vector<char> &luminanceCategoryByte,vector<short int>&luminanceValues,vector<char> &chrominanceCbCategoryByte,vector<short int>&chrominanceCbValues,vector<char> &chrominanceCrCategoryByte,vector<short int>&chrominanceCrValues);
void generateCodeSizes(vector<int>&freq,vector<int>&codeSize,vector<int>&others);
int findV(vector<int>&freq,unsigned int v);
void countNumbersOfCodesCodedWithKBits(vector<char>&BITS,vector<int>&codeSize);
void adjustBitLengthTo16Bits(vector<char>&BITS);
void generateBytesAfterBITS(vector<int>&codeSize,vector<int>&huffmanValue);
void generateHuffmanCodes(vector<char>&BITS,vector<int>bytes,vector<int>&byteHuffmanCode,vector<int>&byteHuffmanCodeLength);
public:
JpegEncode(QImage &exportImage,const QString& filename);
bool savePicture();
};
#endif // JPEGENCODE_H