aboutsummaryrefslogtreecommitdiff
path: root/src/WEBPImage.h
blob: 8a87b082ecb3fc633c455b581eb6862f01af1ab6 (plain) (blame)
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
#pragma once

#include "image.h"
#include "reader.h"

#define BIT_BUFFER_SIZE 1024

namespace TehImage
{
	typedef enum {
		PREDICTOR_TRANSFORM             = 0,
		COLOR_TRANSFORM                 = 1,
		SUBTRACT_GREEN_TRANSFORM        = 2,
		COLOR_INDEXING_TRANSFORM        = 3,
	} TransformType;
	
	class WEBPImage : public Image
	{
	public:
		WEBPImage() = default;
		~WEBPImage() = default;
		
		WEBPImage(const Image& other) : Image(other) {}
		
		int readFromFile(std::string filename) override;
		int writeToFile(std::string filename) override;

	private:
		std::unique_ptr<Reader> reader;
		uint8_t bitBuffer;
		size_t bitBufferPos = 0;

		bool readBit();
		uint32_t readBits(size_t count);
		void readFourCC(char* dest);
		void refreshBitBuffer();
	};
}