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

@ -5,25 +5,43 @@
#include "Image.h"
#include <iostream>
int main()
void testThirdParty()
{
//const auto path = "/home/jmsgrogan/Downloads/test.png";
//const auto path = "/home/jmsgrogan/Downloads/index.png";
const auto path = "/home/jmsgrogan/Downloads/index.png";
const auto path = "/home/jmsgrogan/code/MediaTool-build/bin/test.png";
//const auto path = "/home/jmsgrogan/code/MediaTool-build/bin/test.png";
File file(path);
std::cout << file.dumpBinary();
//File file(path);
//std::cout << file.dumpBinary();
PngReader reader;
reader.setPath(path);
auto image = reader.read();
for(unsigned idx=0; idx<image->getWidth()*image->getBytesPerRow(); idx++)
{
std::cout << "Image val: " << idx << " | " << static_cast<int>(image->getDataRef()[idx]) << std::endl;
}
//for(unsigned idx=0; idx<image->getWidth()*image->getBytesPerRow(); idx++)
//{
// std::cout << "Image val: " << idx << " | " << static_cast<int>(image->getDataRef()[idx]) << std::endl;
//}
}
void testFixedCode()
{
const auto path = "/home/jmsgrogan/code/MediaTool-build/bin/test_fixed.png";
//File file(path);
//std::cout << file.dumpBinary();
PngReader reader;
reader.setPath(path);
auto image = reader.read();
}
int main()
{
testThirdParty();
//testFixedCode();
return 0;
}

View file

@ -3,11 +3,12 @@
#include "File.h"
#include "BitStream.h"
#include "ByteUtils.h"
#include "ImagePrimitives.h"
#include <iostream>
int main()
void testCompressedPng()
{
unsigned width = 20;
unsigned height = 20;
@ -26,11 +27,11 @@ int main()
image->setData(data);
PngWriter writer;
writer.setPath("test.png");
writer.setPath("test_compressed.png");
writer.write(image);
return 0;
File test_file("test.png");
return;
File test_file("test_compressed.png");
test_file.SetAccessMode(File::AccessMode::Read);
test_file.Open(true);
@ -39,6 +40,41 @@ int main()
std::cout << static_cast<unsigned>(*byte) << std::endl;
}
test_file.Close();
}
void testFixedPng()
{
unsigned width = 10;
unsigned height = 10;
unsigned numChannels = 1;
auto image = Image<unsigned char>::Create(width, height);
image->setNumChannels(numChannels);
image->setBitDepth(8);
std::vector<unsigned char> data(width*height, 0);
for (unsigned idx=0; idx<width*height; idx++)
{
//unsigned char val = 100 * idx /(width*height);
unsigned char val = 10;
data[idx] = val;
}
image->setData(data);
PngWriter writer;
writer.setPath("test_fixed.png");
writer.setCompressionMethod(Deflate::CompressionMethod::FIXED_HUFFMAN);
writer.write(image);
//return;
File test_file("test_fixed.png");
std::cout << test_file.dumpBinary();
}
int main()
{
//testCompressedPng();
testFixedPng();
return 0;
}