Skip to content

File IImage.h

File List > include > Interface > IImage.h

Go to the documentation of this file

//=============================================================================
// Copyright (c) 2026 FLIR Integrated Imaging Solutions, Inc. All Rights Reserved.
//
// This software is the confidential and proprietary information of FLIR
// Integrated Imaging Solutions, Inc. ("Confidential Information"). You
// shall not disclose such Confidential Information and shall use it only in
// accordance with the terms of the license agreement you entered into
// with FLIR Integrated Imaging Solutions, Inc. (FLIR).
//
// FLIR MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
// SOFTWARE, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE, OR NON-INFRINGEMENT. FLIR SHALL NOT BE LIABLE FOR ANY DAMAGES
// SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
// THIS SOFTWARE OR ITS DERIVATIVES.
//=============================================================================

#ifndef FLIR_SPINNAKER_IIMAGE_H
#define FLIR_SPINNAKER_IIMAGE_H

#include "SpinGenApi/GCTypes.h"
#include "SpinGenApi/GCString.h"
#include "SpinnakerPlatform.h"
#include "CameraDefs.h"
#include "SpinnakerDefs.h"
#include "ChunkData.h"

#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable : 4996)
#elif defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif

namespace Spinnaker
{
    namespace Relay
    {
        class SpinRelaySender;
        class SpinRelayReceiver;
    } // namespace Relay

    class EventHandler;
    class ImageStatistics;
    class ImagePtr;

    enum PixelFormatEnums;
    class SPINNAKER_API IImage
    {
      public:
        virtual ~IImage(){};

        virtual ColorProcessingAlgorithm GetColorProcessing() const = 0;
        virtual void ResetImage(
            size_t width,
            size_t height,
            size_t offsetX,
            size_t offsetY,
            PixelFormatEnums pixelFormat) = 0;
        virtual void ResetImage(
            size_t width,
            size_t height,
            size_t offsetX,
            size_t offsetY,
            PixelFormatEnums pixelFormat,
            void* pData) = 0;
        virtual void ResetImage(
            size_t width,
            size_t height,
            size_t offsetX,
            size_t offsetY,
            PixelFormatEnums pixelFormat,
            void* pData,
            TLPayloadType dataPayloadType,
            size_t dataSize) = 0;
        virtual void Release() = 0;
        virtual uint64_t GetID() const = 0;
        virtual uint64_t GetStreamIndex() const = 0;
        virtual GenICam::gcstring GetSerialNumber() const = 0;
        virtual void* GetData() const = 0;
        virtual void* GetPrivateData() const = 0;
        virtual float GetDataAbsoluteMax() const = 0;
        virtual float GetDataAbsoluteMin() const = 0;
        virtual size_t GetBufferSize() const = 0;
        virtual void DeepCopy(const ImagePtr pSrcImage) = 0;
        virtual size_t GetWidth() const = 0;
        virtual size_t GetHeight() const = 0;
        virtual size_t GetStride() const = 0;
        virtual size_t GetBitsPerPixel() const = 0;
        virtual size_t GetNumChannels() const = 0;
        virtual size_t GetXOffset() const = 0;
        virtual size_t GetYOffset() const = 0;
        virtual size_t GetXPadding() const = 0;
        virtual size_t GetYPadding() const = 0;
        virtual uint64_t GetFrameID() const = 0;
        virtual ImagePayloadType GetImagePayloadType() const = 0;
        virtual size_t GetPayloadType() const = 0;
        virtual TLPayloadType GetTLPayloadType() const = 0;
        virtual uint64_t GetTLPixelFormat() const = 0;
        virtual TLPixelFormatNamespace GetTLPixelFormatNamespace() const = 0;
        virtual GenICam::gcstring GetPixelFormatName() const = 0;
        virtual PixelFormatEnums GetPixelFormat() const = 0;
        virtual PixelFormatIntType GetPixelFormatIntType() const = 0;
        virtual bool IsIncomplete() const = 0;
        virtual size_t GetValidPayloadSize() const = 0;
        virtual uint64_t GetChunkLayoutId() const = 0;
        virtual uint64_t GetTimeStamp() const = 0;
        virtual void Save(const char* pFilename, ImageFileFormat format = SPINNAKER_IMAGE_FILE_FORMAT_FROM_FILE_EXT)
            const = 0;
        virtual void Save(const char* pFilename, PNGOption& pOption) const = 0;
        virtual void Save(const char* pFilename, PPMOption& pOption) const = 0;
        virtual void Save(const char* pFilename, PGMOption& pOption) const = 0;
        virtual void Save(const char* pFilename, TIFFOption& pOption) const = 0;
        virtual void Save(const char* pFilename, JPEGOption& pOption) const = 0;
        virtual void Save(const char* pFilename, JPG2Option& pOption) const = 0;
        virtual void Save(const char* pFilename, BMPOption& pOption) const = 0;
        virtual void Save(const char* pFilename, GenDCOption& pOption) const = 0;
        virtual void Save(const char* pFilename, SIOption& option) const = 0;
        virtual const ChunkData& GetChunkData() const = 0;
        virtual void CalculateStatistics(ImageStatistics& pStatistics) = 0;
        virtual bool HasCRC() const = 0;
        virtual bool HasChunkData() const = 0;
        virtual bool CheckCRC() const = 0;
        virtual size_t GetImageSize() const = 0;
        virtual bool IsInUse() = 0;
        virtual ImageStatus GetImageStatus() const = 0;
        virtual bool IsCompressed() const = 0;

      protected:
        friend class Stream;
        friend class ImageImpl;
        friend class ImageListImpl;
        friend class SpinnakerGPUImpl;
        friend class Relay::SpinRelaySender;
        friend class Relay::SpinRelayReceiver;

        IImage(){};
        struct ImageData;
        virtual ImageData* GetImageData() const = 0;
        virtual void SaveData(void* pData, size_t dataSize) = 0;
        virtual void RegisterImageReleaseEvent(EventHandler& evtHandlerToRegister, void* pData) = 0;
    };

} // namespace Spinnaker

#ifdef _MSC_VER
#pragma warning(pop)
#elif defined(__GNUC__)
#pragma GCC diagnostic pop
#endif

#endif // FLIR_SPINNAKER_IIMAGE_H