Skip to content

SGProcessingManager/include/datasplitter/ImageSplitter.hpp

Namespaces

Name
sgns
sgns::sgprocessing

Classes

Name
class sgns::sgprocessing::ImageSplitter

Source code

#include <vector>
#include <openssl/evp.h>
#include <cstring>
//#include <libp2p/multi/content_identifier_codec.hpp>

namespace sgns::sgprocessing
{
    class ImageSplitter
    {
    public:
        ImageSplitter() = default;
        ImageSplitter( const char *filename,
                       uint64_t    blockstride,
                       uint64_t    blocklinestride,
                       uint64_t    blocklen,
                       int         channels );

        ImageSplitter( const std::vector<char> &buffer,
                       uint64_t                 blockstride,
                       uint64_t                 blocklinestride,
                       uint64_t                 blocklen,
                       int                      channels );

        ImageSplitter( const std::vector<uint8_t> &buffer,
                       uint64_t                    blockstride,
                       uint64_t                    blocklinestride,
                       uint64_t                    blocklen,
                       int                         channels );

        ~ImageSplitter()
        {
            //free(inputImage);
        }

        std::vector<uint8_t> GetPart( int part );

        size_t GetPartByCid( const std::vector<uint8_t> &cid ) const;

        uint32_t GetPartSize( int part ) const;

        uint32_t GetPartStride( int part ) const;

        int GetPartWidthActual( int part ) const;

        int GetPartHeightActual( int part ) const;

        size_t GetPartCount() const;

        size_t GetImageSize() const;

        std::vector<uint8_t> GetPartCID( int part ) const;

    private:
        void SplitImageData();

        std::vector<std::vector<uint8_t>>             splitparts_;
        int                                           partwidth_  = 32;
        int                                           partheight_ = 32;
        uint64_t                                      blockstride_;
        uint64_t                                      blocklinestride_;
        uint64_t                                      blocklen_;
        int                                           channels_;
        const unsigned char                          *inputImage;
        uint64_t                                      imageSize;
        std::vector<int>                              chunkWidthActual_;
        std::vector<int>                              chunkHeightActual_;
        std::vector<std::vector<uint8_t>>             cids_;
    };
}

Updated on 2026-03-04 at 13:10:44 -0800