EHS/include/io/img/PNG.h

51 lines
1.3 KiB
C
Raw Normal View History

2023-12-17 03:29:08 -08:00
#pragma once
2023-12-17 15:00:08 -08:00
#include "EHS.h"
#include "Serializer.h"
2023-12-17 03:29:08 -08:00
#include "PNG_Chunk.h"
#include "Img.h"
2023-12-17 15:56:13 -08:00
namespace ehs
2023-12-17 03:29:08 -08:00
{
class PNG
{
private:
Str_8 id;
UInt_64 hashId;
Array<PNG_Chunk> chunks;
public:
PNG();
PNG(const Str_8& filePath);
PNG(const Str_8& id, Serializer<UInt_64>& data);
PNG(const PNG& png);
PNG& operator=(const PNG& png);
bool HasChunk(const UInt_64 hashId) const;
bool HasChunk(const Str_8& id) const;
PNG_Chunk* GetChunk(const UInt_64 hashId);
PNG_Chunk* GetChunk(const Str_8& id);
static bool IsPNG(Serializer<UInt_32>& data);
static void FilterNone(const Byte* const in, Byte* const out, const UInt_8 bitDepth, const UInt_8 channels, const UInt_32 scanline);
static void FilterSub(const Byte* const in, Byte* const out, const UInt_8 bitDepth, const UInt_8 channels, const UInt_32 scanline);
static void FilterUp(const Byte* const in, Byte* const out, const UInt_8 bitDepth, const UInt_8 channels, const UInt_32 scanline);
static void FilterAverage(const Byte* const in, Byte* const out, const UInt_8 bitDepth, const UInt_8 channels, const UInt_32 scanline);
static void FilterPaeth(const Byte* const in, Byte* const out, const UInt_8 bitDepth, const UInt_8 channels, const UInt_32 scanline);
private:
static Byte PaethPredictor(const Byte a, const Byte b, const Byte c);
};
}