#pragma once #include "PngHeader.h" #include "Image.h" #include "DeflateElements.h" #include "PlatformImageWriter.h" #include #include #include using Path = std::filesystem::path; class BitStream; class BufferBitStream; class File; class PngWriter { public: PngWriter(); ~PngWriter(); static std::unique_ptr Create(); void setCompressionMethod(Deflate::CompressionMethod method); void setPath(const Path& path); void setPngInfo(const PngInfo& info); void write(const std::unique_ptr& image); void write(Image* image); private: void writeSignature(); void writeHeader(); void writeDataChunks(const BufferBitStream& buffer); void writeEndChunk(); //void writeIDatChunk(); Path mPath; Image* mWorkingImage{nullptr}; std::unique_ptr mInStream; std::unique_ptr mOutStream; std::unique_ptr mWorkingFile; unsigned mPngInfoUserSet{false}; PngInfo mPngInfo; PngHeader mPngHeader; Deflate::CompressionMethod mCompressionMethod{Deflate::CompressionMethod::DYNAMIC_HUFFMAN}; std::unique_ptr mPlatformWriter; }; using PngWriterPtr = std::unique_ptr;