Program Listing for File libcacaoimage.hpp

Return to documentation for file (libs/image/include/libcacaoimage.hpp)

#pragma once

#include <vector>
#include <istream>
#include <ostream>
#include <cstdint>

namespace libcacaoimage {
    struct Image {
        unsigned int w;
        unsigned int h;

        enum class Layout : uint8_t {
            Grayscale = 1,
            RGB = 3,
            RGBA = 4
        } layout;
        uint8_t bitsPerChannel;
        std::vector<unsigned char> data;

        enum class Format {
            PNG,
            JPEG,
            WebP,
            TGA,
            TIFF,
        } format;

        int quality;
        bool lossy;
    };

    namespace decode {
        Image DecodeGeneric(std::istream& input);

        Image DecodePNG(std::istream& input);

        Image DecodeJPEG(std::istream& input);

        Image DecodeWebP(std::istream& input);

        Image DecodeTGA(std::istream& input);

        Image DecodeTIFF(std::istream& input);
    }

    namespace encode {
        std::size_t Reencode(const Image& src, std::ostream& out);

        std::size_t EncodePNG(const Image& src, std::ostream& out);

        std::size_t EncodeJPEG(const Image& src, std::ostream& out);

        std::size_t EncodeWebP(const Image& src, std::ostream& out);

        std::size_t EncodeTGA(const Image& src, std::ostream& out);

        std::size_t EncodeTIFF(const Image& src, std::ostream& out);
    }

    Image Convert16To8BitColor(const Image& src);

    Image Flip(const Image& src);

    Image ChangeChannelLayout(const Image& src, Image::Layout layout);
}