Initial fixed huffman coding for png.

This commit is contained in:
James Grogan 2022-11-28 10:16:04 +00:00
parent e4f9393ee7
commit 7f5009fb5e
39 changed files with 1294 additions and 440 deletions

View file

@ -29,7 +29,7 @@ std::optional<unsigned char> ImageBitStream::readNextByte()
return val;
}
void ImageBitStream::writeByte(unsigned char data)
void ImageBitStream::writeByte(unsigned char data, bool checkOverflow )
{
mByteOffset++;

View file

@ -15,7 +15,7 @@ public:
std::optional<unsigned char> readNextByte() override;
void writeByte(unsigned char data) override;
void writeByte(unsigned char data, bool checkOverflow = true) override;
void writeBytes(const std::vector<unsigned char> data) override
{

View file

@ -30,6 +30,11 @@ std::unique_ptr<PngWriter> PngWriter::Create()
return std::make_unique<PngWriter>();
}
void PngWriter::setCompressionMethod(Deflate::CompressionMethod method)
{
mCompressionMethod = method;
}
void PngWriter::setPath(const Path& path)
{
mPath = path;
@ -91,6 +96,7 @@ void PngWriter::writeHeader()
void PngWriter::writeEndChunk()
{
std::cout << "Start writing end chunk" << std::endl;
unsigned length{0};
mOutStream->write(length);
@ -145,6 +151,7 @@ void PngWriter::writeDataChunks(const BufferBitStream& buffer)
auto crc = crc_check.getChecksum();
std::cout << "Writing idat crc" << crc << std::endl;
mOutStream->write(crc);
std::cout << "Finished Writing idat crc" << crc << std::endl;
}
}
@ -192,12 +199,17 @@ void PngWriter::write(const std::unique_ptr<Image<unsigned char> >& image)
lz77_out_stream = std::make_unique<BufferBitStream>();
Lz77Encoder lz77_encoder(filter_out_stream.get(), lz77_out_stream.get());
if (mCompressionMethod == Deflate::CompressionMethod::DYNAMIC_HUFFMAN)
{
// Set up custom encoder;
}
lz77_encoder.encode();
lz77_out_stream->resetOffsets();
}
BufferBitStream zlib_out_stream;
ZlibEncoder zlib_encoder(lz77_out_stream.get(), &zlib_out_stream);
zlib_encoder.setDeflateCompressionMethod(mCompressionMethod);
zlib_encoder.encode();
zlib_out_stream.resetOffsets();

View file

@ -22,6 +22,8 @@ public:
static std::unique_ptr<PngWriter> Create();
void setCompressionMethod(Deflate::CompressionMethod method);
void setPath(const Path& path);
void setPngInfo(const PngInfo& info);