#include "PngInfo.h" std::string PngInfo::toString(ColorType colorType) const { switch(colorType) { case ColorType::GREYSCALE: return "GREYSCALE"; case ColorType::RGB: return "RGB"; case ColorType::PALETTE: return "PALETTE"; case ColorType::GREYSCALE_ALPHA: return "GREYSCALE_ALPHA"; case ColorType::RGB_ALPHA: return "RGB_ALPHA"; default: return "UNKNOWN"; } } unsigned PngInfo::getNumChannels() const { switch(mColorType) { case ColorType::GREYSCALE: return 1; case ColorType::RGB: return 3; case ColorType::PALETTE: return 1; case ColorType::GREYSCALE_ALPHA: return 2; case ColorType::RGB_ALPHA: return 4; default: return 1; } } std::string PngInfo::toString(CompressionMethod method) const { switch(method) { case CompressionMethod::DEFLATE: return "DEFLATE"; default: return "UNKNOWN"; } } std::string PngInfo::toString(FilterMethod method) const { switch(method) { case FilterMethod::ADAPTIVE: return "ADAPTIVE"; default: return "UNKNOWN"; } } std::string PngInfo::toString(InterlaceMethod method) const { switch(method) { case InterlaceMethod::NONE: return "NONE"; case InterlaceMethod::ADAM7: return "ADAM7"; default: return "UNKNOWN"; } } bool PngInfo::bitDepthIsValid(ColorType colorType, unsigned char bitDepth) const { switch(colorType) { case ColorType::GREYSCALE: return (bitDepth == 1) || (bitDepth == 2) || (bitDepth == 4) || (bitDepth == 8) || (bitDepth == 16) ; case ColorType::RGB: return (bitDepth == 8) || (bitDepth == 16); case ColorType::PALETTE: return (bitDepth == 1) || (bitDepth == 2) || (bitDepth == 4) || (bitDepth == 8); case ColorType::GREYSCALE_ALPHA: return (bitDepth == 8) || (bitDepth == 16); case ColorType::RGB_ALPHA: return (bitDepth == 8) || (bitDepth == 16); default: return false; } } bool PngInfo::compressionMethodIsValid(unsigned char method) { return method == 0; } bool PngInfo::filterMethodIsValid(unsigned char method) { return method == 0; } std::string PngInfo::toString() const { std::stringstream sstr; sstr << "PngInfo" << "\n"; sstr << "colorType: " << toString(mColorType) << "\n"; sstr << "compressionMethod: " << toString(mCompressionMethod) << "\n"; sstr << "filterMethod: " << toString(mFilterMethod) << "\n"; sstr << "interlaceMethod: " << toString(mInterlaceMethod) << "\n"; return sstr.str(); }