#include "PngHeader.h" #include "Bits.h" #include "StringUtils.h" #include "CyclicRedundancyChecker.h" String PngHeader::toString() const { Stringstream sstr; sstr << "PngHeader" << "\n"; sstr << "width: " << mWidth << "\n"; sstr << "height: " << mHeight << "\n"; sstr << "bitDepth: " << static_cast(mBitDepth) << "\n"; sstr << "cached CRC: " << mCachedCrc << "\n"; sstr << mPngInfo.toString(); return sstr.str(); } DWord PngHeader::getWidth() const { return mWidth; } DWord PngHeader::getHeight() const { return mHeight; } Byte PngHeader::getBitDepth() const { return mBitDepth; } const PngInfo& PngHeader::getPngInfo() const { return mPngInfo; } DWord PngHeader::getLength() const { return 13; } Byte PngHeader::getHighBitCheck() const { return 0x89; } void PngHeader::getSignature(VecBytes& sig) const { sig = {13, 10, 26, 10}; } String PngHeader::getFileName() const { return "PNG"; } const String& PngHeader::getChunkName() const { return mName; } const VecBytes& PngHeader::getData() const { return mData; } void PngHeader::updateData() { mData.clear(); const auto num_bytes = sizeof(DWord); for(size_t idx=0; idx(mPngInfo.mColorType)); mData.push_back(static_cast(mPngInfo.mCompressionMethod)); mData.push_back(static_cast(mPngInfo.mFilterMethod)); mData.push_back(static_cast(mPngInfo.mInterlaceMethod)); } DWord PngHeader::getCrc() { CyclicRedundancyChecker crc_check; Vector char_data = StringUtils::toBytes(mName); for (auto c : char_data) { crc_check.addValue(c); } for (auto entry : mData) { crc_check.addValue(entry); } mCachedCrc = crc_check.getChecksum(); return mCachedCrc; } void PngHeader::setPngInfo(const PngInfo& info) { mPngInfo = info; } void PngHeader::setImageData(uint32_t width, uint32_t height, unsigned char bitDepth) { mWidth = width; mHeight = height; mBitDepth = bitDepth; }