GrabBag/SDK/Galaxy/Windows/inc/IGXImageFormatConvert.h
2025-12-10 00:01:32 +08:00

375 lines
18 KiB
C++

//---------------------------------------------------------------
/**
\file IGxImageFormatConvert.h
\brief Definition of the IGxImageFormatConvert interface
\Date 2024-05-21
\Version 1.1.2405.9211
<p>Copyright (c) 2011-2021 China Daheng Group, Inc. Beijing Image
Vision Technology Branch and all right reserved.</p>
*/
//---------------------------------------------------------------
#pragma once
#include "GXIAPIBase.h"
#include "GXSmartPtr.h"
#include "IImageData.h"
//--------------------------------------------
/**
\brief Image format conversion class
*/
//---------------------------------------------
class GXIAPICPP_API IGXImageFormatConvert
{
public:
//---------------------------------------------------------
/**
\brief Destructor
*/
//---------------------------------------------------------
virtual ~IGXImageFormatConvert(){};
//----------------------------------------------------------------------------------
/**
\brief Sets the pixel format of the image you want to convert
\param emPixelFormat[in] Image pixel format expected to be converted (Default : GX_PIXEL_FORMAT_UNDEFINED)
\return void
*/
//----------------------------------------------------------------------------------
virtual void SetDstFormat(GX_PIXEL_FORMAT_ENTRY emDstFormat) = 0;
//----------------------------------------------------------------------------------
/**
\brief Get the pixel format of the image you want to convert
\return Image pixel format expected to be converted
*/
//----------------------------------------------------------------------------------
virtual GX_PIXEL_FORMAT_ENTRY GetDstFormat() = 0;
//----------------------------------------------------------------------------------
/**
\brief Set conversion algorithm
\param emConvertType[in] Algorithm used in conversion (Default : GX_RAW2RGB_NEIGHBOUR)
\return void
*/
//----------------------------------------------------------------------------------
virtual void SetInterpolationType(GX_BAYER_CONVERT_TYPE_LIST emInterpolationType) = 0;
//----------------------------------------------------------------------------------
/**
\brief Get conversion algorithm
\return Algorithm used in conversion
*/
//----------------------------------------------------------------------------------
virtual GX_BAYER_CONVERT_TYPE_LIST GetInterpolationType() = 0;
//----------------------------------------------------------------------------------
/**
\brief Sets the alpha value of an image with an alpha channel
\param ui64AlphaValue[in] Alpha channel value (Range : 0-255 Default : 255)
\return void
*/
//----------------------------------------------------------------------------------
virtual void SetAlphaValue(uint64_t ui64AlphaValue) = 0;
//----------------------------------------------------------------------------------
/**
\brief Gets the alpha value of an image with an alpha channel
\return Alpha channel value
*/
//----------------------------------------------------------------------------------
virtual uint64_t GetAlphaValue() = 0;
//----------------------------------------------------------------------------------
/**
\brief Obtain the converted image buffer size according to the image data(Unit : byte)
\param pObjSrcImageData[in] Source image pointer
\return Buffer length of converted image
*/
//----------------------------------------------------------------------------------
virtual uint64_t GetBufferSizeForConversion(CImageDataPointer pObjSrcImageData) = 0;
//----------------------------------------------------------------------------------
/**
\brief Obtain the converted image buffer size according to the image data(Unit : byte)
\param ui64SrcWidth[in] Source image width
\param ui64SrcHeight[in] Source image height
\param emSrcFormat[in] Source image pixel format
\return Buffer length of converted image
*/
//----------------------------------------------------------------------------------
virtual uint64_t GetBufferSizeForConversion(uint64_t ui64SrcWidth, uint64_t ui64SrcHeight,
GX_PIXEL_FORMAT_ENTRY emSrcFormat) = 0;
//----------------------------------------------------------------------------------
/**
\brief Perform conversion
Supported image format conversion include:
1.Bayer conversion
a. input image format GX_PIXEL_FORMAT_BAYER_GR8 GX_PIXEL_FORMAT_BAYER_RG8
GX_PIXEL_FORMAT_BAYER_GB8 GX_PIXEL_FORMAT_BAYER_BG8
output image format GX_PIXEL_FORMAT_MONO8 GX_PIXEL_FORMAT_RGB8
GX_PIXEL_FORMAT_RGBA8 GX_PIXEL_FORMAT_BGRA8
GX_PIXEL_FORMAT_ARGB8 GX_PIXEL_FORMAT_ABGR8
GX_PIXEL_FORMAT_RGB8_PLANAR
b. input image format GX_PIXEL_FORMAT_BAYER_GR10 GX_PIXEL_FORMAT_BAYER_RG10
GX_PIXEL_FORMAT_BAYER_GB10 GX_PIXEL_FORMAT_BAYER_BG10
GX_PIXEL_FORMAT_BAYER_GR12 GX_PIXEL_FORMAT_BAYER_RG12
GX_PIXEL_FORMAT_BAYER_GB12 GX_PIXEL_FORMAT_BAYER_BG12
GX_PIXEL_FORMAT_BAYER_GR14 GX_PIXEL_FORMAT_BAYER_RG14
GX_PIXEL_FORMAT_BAYER_GB14 GX_PIXEL_FORMAT_BAYER_BG14
GX_PIXEL_FORMAT_BAYER_GR16 GX_PIXEL_FORMAT_BAYER_RG16
GX_PIXEL_FORMAT_BAYER_GB16 GX_PIXEL_FORMAT_BAYER_BG16
output image format GX_PIXEL_FORMAT_MONO16 GX_PIXEL_FORMAT_RGB16
GX_PIXEL_FORMAT_BGR16 GX_PIXEL_FORMAT_RGB16_PLANAR
GX_PIXEL_FORMAT_RGB8 GX_PIXEL_FORMAT_BGR8
2.RGB conversion
a. input image format GX_PIXEL_FORMAT_RGB8 GX_PIXEL_FORMAT_BGR8
output image format GX_PIXEL_FORMAT_YUV444_8 GX_PIXEL_FORMAT_YUV422_8
GX_PIXEL_FORMAT_YUV411_8 GX_PIXEL_FORMAT_YUV420_8_PLANAR
GX_PIXEL_FORMAT_YCBCR444_8 GX_PIXEL_FORMAT_YCBCR422_8
GX_PIXEL_FORMAT_YCBCR411_8 GX_PIXEL_FORMAT_MONO8
GX_PIXEL_FORMAT_RGB8
b. input image format GX_PIXEL_FORMAT_RGB16 GX_PIXEL_FORMAT_BGR16
output image format GX_PIXEL_FORMAT_MONO16
3.Packed conversion(GVSP)
a. input image format GX_PIXEL_FORMAT_MONO10_PACKED GX_PIXEL_FORMAT_MONO12_PACKED
GX_PIXEL_FORMAT_BAYER_RG10_PACKED GX_PIXEL_FORMAT_BAYER_GR10_PACKED
GX_PIXEL_FORMAT_BAYER_BG10_PACKED GX_PIXEL_FORMAT_BAYER_GB10_PACKED
GX_PIXEL_FORMAT_BAYER_RG12_PACKED GX_PIXEL_FORMAT_BAYER_GR12_PACKED
GX_PIXEL_FORMAT_BAYER_BG12_PACKED GX_PIXEL_FORMAT_BAYER_GB12_PACKED
output image format GX_PIXEL_FORMAT_MONO8 GX_PIXEL_FORMAT_MONO10
GX_PIXEL_FORMAT_MONO12 GX_PIXEL_FORMAT_RGB8
GX_PIXEL_FORMAT_BAYER_RG8 GX_PIXEL_FORMAT_BAYER_GR8
GX_PIXEL_FORMAT_BAYER_BG8 GX_PIXEL_FORMAT_BAYER_GB8
GX_PIXEL_FORMAT_BAYER_RG10 GX_PIXEL_FORMAT_BAYER_GR10
GX_PIXEL_FORMAT_BAYER_BG10 GX_PIXEL_FORMAT_BAYER_GB10
GX_PIXEL_FORMAT_BAYER_RG12 GX_PIXEL_FORMAT_BAYER_GR12
GX_PIXEL_FORMAT_BAYER_BG12 GX_PIXEL_FORMAT_BAYER_GB12
GX_PIXEL_FORMAT_RGB8
4.Packed conversion(PFNC)
a. input image format GX_PIXEL_FORMAT_MONO10_P GX_PIXEL_FORMAT_MONO12_P
GX_PIXEL_FORMAT_MONO14_P
GX_PIXEL_FORMAT_BAYER_RG10_P GX_PIXEL_FORMAT_BAYER_GR10_P
GX_PIXEL_FORMAT_BAYER_BG10_P GX_PIXEL_FORMAT_BAYER_GB10_P
GX_PIXEL_FORMAT_BAYER_RG12_P GX_PIXEL_FORMAT_BAYER_GR12_P
GX_PIXEL_FORMAT_BAYER_BG12_P GX_PIXEL_FORMAT_BAYER_GB12_P
GX_PIXEL_FORMAT_BAYER_RG14_P GX_PIXEL_FORMAT_BAYER_GR14_P
GX_PIXEL_FORMAT_BAYER_BG14_P GX_PIXEL_FORMAT_BAYER_GB14_P
output image format GX_PIXEL_FORMAT_MONO8 GX_PIXEL_FORMAT_MONO10
GX_PIXEL_FORMAT_MONO12 GX_PIXEL_FORMAT_MONO14
GX_PIXEL_FORMAT_RGB8
GX_PIXEL_FORMAT_BAYER_RG8 GX_PIXEL_FORMAT_BAYER_GR8
GX_PIXEL_FORMAT_BAYER_BG8 GX_PIXEL_FORMAT_BAYER_GB8
GX_PIXEL_FORMAT_BAYER_RG10 GX_PIXEL_FORMAT_BAYER_GR10
GX_PIXEL_FORMAT_BAYER_BG10 GX_PIXEL_FORMAT_BAYER_GB10
GX_PIXEL_FORMAT_BAYER_RG12 GX_PIXEL_FORMAT_BAYER_GR12
GX_PIXEL_FORMAT_BAYER_BG12 GX_PIXEL_FORMAT_BAYER_GB12
GX_PIXEL_FORMAT_BAYER_RG14 GX_PIXEL_FORMAT_BAYER_GR14
GX_PIXEL_FORMAT_BAYER_BG14 GX_PIXEL_FORMAT_BAYER_GB14
5.Mono conversion
a. input image format GX_PIXEL_FORMAT_MONO8 GX_PIXEL_FORMAT_R8
GX_PIXEL_FORMAT_G8 GX_PIXEL_FORMAT_B8
output image format GX_PIXEL_FORMAT_RGB8
b. input image format GX_PIXEL_FORMAT_MONO10 GX_PIXEL_FORMAT_MONO12
GX_PIXEL_FORMAT_MONO14 GX_PIXEL_FORMAT_MONO16
output image format GX_PIXEL_FORMAT_RGB8
6.Coord3D conversion
a. input image format GX_PIXEL_FORMAT_COORD3D_C16
output image format GX_PIXEL_FORMAT_COORD3D_ABC32F
b. input image format GX_PIXEL_FORMAT_COORD3D_C16
output image format GX_PIXEL_FORMAT_COORD3D_ABC32F_PLANAR
\param pObjSrcImageData[in] Source image pointer
\param pDstBuffer[in|out] Output converted image buffer data
\param nDstBufferSize[in] Input pDstBuffer size
\param bFlip[in] Is the image mirrored
\return void
*/
//----------------------------------------------------------------------------------
virtual void Convert(CImageDataPointer pObjSrcImageData, void* pDstBuffer, size_t nDstBufferSize, bool bFlip) = 0;
//----------------------------------------------------------------------------------
/**
\brief Perform conversion
Supported image format conversion include:
1.Bayer conversion
a. input image format GX_PIXEL_FORMAT_BAYER_GR8 GX_PIXEL_FORMAT_BAYER_RG8
GX_PIXEL_FORMAT_BAYER_GB8 GX_PIXEL_FORMAT_BAYER_BG8
output image format GX_PIXEL_FORMAT_MONO8 GX_PIXEL_FORMAT_RGB8
GX_PIXEL_FORMAT_RGBA8 GX_PIXEL_FORMAT_BGRA8
GX_PIXEL_FORMAT_ARGB8 GX_PIXEL_FORMAT_ABGR8
GX_PIXEL_FORMAT_RGB8_PLANAR
b. input image format GX_PIXEL_FORMAT_BAYER_GR10 GX_PIXEL_FORMAT_BAYER_RG10
GX_PIXEL_FORMAT_BAYER_GB10 GX_PIXEL_FORMAT_BAYER_BG10
GX_PIXEL_FORMAT_BAYER_GR12 GX_PIXEL_FORMAT_BAYER_RG12
GX_PIXEL_FORMAT_BAYER_GB12 GX_PIXEL_FORMAT_BAYER_BG12
GX_PIXEL_FORMAT_BAYER_GR14 GX_PIXEL_FORMAT_BAYER_RG14
GX_PIXEL_FORMAT_BAYER_GB14 GX_PIXEL_FORMAT_BAYER_BG14
GX_PIXEL_FORMAT_BAYER_GR16 GX_PIXEL_FORMAT_BAYER_RG16
GX_PIXEL_FORMAT_BAYER_GB16 GX_PIXEL_FORMAT_BAYER_BG16
output image format GX_PIXEL_FORMAT_MONO16 GX_PIXEL_FORMAT_RGB16
GX_PIXEL_FORMAT_BGR16 GX_PIXEL_FORMAT_RGB16_PLANAR
GX_PIXEL_FORMAT_RGB8 GX_PIXEL_FORMAT_BGR8
2.RGB conversion
a. input image format GX_PIXEL_FORMAT_RGB8 GX_PIXEL_FORMAT_BGR8
output image format GX_PIXEL_FORMAT_YUV444_8 GX_PIXEL_FORMAT_YUV422_8
GX_PIXEL_FORMAT_YUV411_8 GX_PIXEL_FORMAT_YUV420_8_PLANAR
GX_PIXEL_FORMAT_YCBCR444_8 GX_PIXEL_FORMAT_YCBCR422_8
GX_PIXEL_FORMAT_YCBCR411_8 GX_PIXEL_FORMAT_MONO8
GX_PIXEL_FORMAT_RGB8
b. input image format GX_PIXEL_FORMAT_RGB16 GX_PIXEL_FORMAT_BGR16
output image format GX_PIXEL_FORMAT_MONO16
3.Packed conversion(GVSP)
a. input image format GX_PIXEL_FORMAT_MONO10_PACKED GX_PIXEL_FORMAT_MONO12_PACKED
GX_PIXEL_FORMAT_BAYER_RG10_PACKED GX_PIXEL_FORMAT_BAYER_GR10_PACKED
GX_PIXEL_FORMAT_BAYER_BG10_PACKED GX_PIXEL_FORMAT_BAYER_GB10_PACKED
GX_PIXEL_FORMAT_BAYER_RG12_PACKED GX_PIXEL_FORMAT_BAYER_GR12_PACKED
GX_PIXEL_FORMAT_BAYER_BG12_PACKED GX_PIXEL_FORMAT_BAYER_GB12_PACKED
output image format GX_PIXEL_FORMAT_MONO8 GX_PIXEL_FORMAT_MONO10
GX_PIXEL_FORMAT_MONO12 GX_PIXEL_FORMAT_RGB8
GX_PIXEL_FORMAT_BAYER_RG8 GX_PIXEL_FORMAT_BAYER_GR8
GX_PIXEL_FORMAT_BAYER_BG8 GX_PIXEL_FORMAT_BAYER_GB8
GX_PIXEL_FORMAT_BAYER_RG10 GX_PIXEL_FORMAT_BAYER_GR10
GX_PIXEL_FORMAT_BAYER_BG10 GX_PIXEL_FORMAT_BAYER_GB10
GX_PIXEL_FORMAT_BAYER_RG12 GX_PIXEL_FORMAT_BAYER_GR12
GX_PIXEL_FORMAT_BAYER_BG12 GX_PIXEL_FORMAT_BAYER_GB12
GX_PIXEL_FORMAT_RGB8
4.Packed conversion(PFNC)
a. input image format GX_PIXEL_FORMAT_MONO10_P GX_PIXEL_FORMAT_MONO12_P
GX_PIXEL_FORMAT_MONO14_P
GX_PIXEL_FORMAT_BAYER_RG10_P GX_PIXEL_FORMAT_BAYER_GR10_P
GX_PIXEL_FORMAT_BAYER_BG10_P GX_PIXEL_FORMAT_BAYER_GB10_P
GX_PIXEL_FORMAT_BAYER_RG12_P GX_PIXEL_FORMAT_BAYER_GR12_P
GX_PIXEL_FORMAT_BAYER_BG12_P GX_PIXEL_FORMAT_BAYER_GB12_P
GX_PIXEL_FORMAT_BAYER_RG14_P GX_PIXEL_FORMAT_BAYER_GR14_P
GX_PIXEL_FORMAT_BAYER_BG14_P GX_PIXEL_FORMAT_BAYER_GB14_P
output image format GX_PIXEL_FORMAT_MONO8 GX_PIXEL_FORMAT_MONO10
GX_PIXEL_FORMAT_MONO12 GX_PIXEL_FORMAT_MONO14
GX_PIXEL_FORMAT_RGB8
GX_PIXEL_FORMAT_BAYER_RG8 GX_PIXEL_FORMAT_BAYER_GR8
GX_PIXEL_FORMAT_BAYER_BG8 GX_PIXEL_FORMAT_BAYER_GB8
GX_PIXEL_FORMAT_BAYER_RG10 GX_PIXEL_FORMAT_BAYER_GR10
GX_PIXEL_FORMAT_BAYER_BG10 GX_PIXEL_FORMAT_BAYER_GB10
GX_PIXEL_FORMAT_BAYER_RG12 GX_PIXEL_FORMAT_BAYER_GR12
GX_PIXEL_FORMAT_BAYER_BG12 GX_PIXEL_FORMAT_BAYER_GB12
GX_PIXEL_FORMAT_BAYER_RG14 GX_PIXEL_FORMAT_BAYER_GR14
GX_PIXEL_FORMAT_BAYER_BG14 GX_PIXEL_FORMAT_BAYER_GB14
5.Mono conversion
a. input image format GX_PIXEL_FORMAT_MONO8 GX_PIXEL_FORMAT_R8
GX_PIXEL_FORMAT_G8 GX_PIXEL_FORMAT_B8
output image format GX_PIXEL_FORMAT_RGB8
b. input image format GX_PIXEL_FORMAT_MONO10 GX_PIXEL_FORMAT_MONO12
GX_PIXEL_FORMAT_MONO14 GX_PIXEL_FORMAT_MONO16
output image format GX_PIXEL_FORMAT_RGB8
6.Coord3D conversion
a. input image format GX_PIXEL_FORMAT_COORD3D_C16
output image format GX_PIXEL_FORMAT_COORD3D_ABC32F
b. input image format GX_PIXEL_FORMAT_COORD3D_C16
output image format GX_PIXEL_FORMAT_COORD3D_ABC32F_PLANAR
\param pSrcBuffer[in] Source image Buffer
\param ui64SrcWidth[in] Source image width
\param ui64SrcHeight[in] Source image Height
\param emSrcFormat[in] Source image pixel format
\param pDstBuffer[in|out] Output converted image buffer data
\param nDstBufferSize[in] Input pDstBuffer size
\param bFlip[in] Is the image mirrored
\return void
*/
//----------------------------------------------------------------------------------
virtual void Convert(void* pSrcBuffer, uint64_t ui64SrcWidth, uint64_t ui64SrcHeight,
GX_PIXEL_FORMAT_ENTRY emSrcFormat, void* pDstBuffer, size_t nDstBufferSize, bool bFlip) = 0;
//--------------------------------------------------
/**
\brief Load 3D Calibration Parameters
\param pCalibParamBuffer [in] Calibration Parameters
\param nBufferSize [in] Calibration Parameters size
\return void
*/
//--------------------------------------------------
virtual void Set3DCalibParam(void* pCalibParamBuffer, size_t nBufferSize) = 0;
//--------------------------------------------------
/**
\brief Get 3D Calibration Parameters
\param pCalibParamBuffer [in] Calibration Parameters
\param nBufferSize [in] Calibration Parameters size
\return void
*/
//--------------------------------------------------
virtual void* Get3DCalibParam() = 0;
//--------------------------------------------------
/**
\brief Set Y-direction step
\param dY [in] Y-direction step
\return void
*/
//--------------------------------------------------
virtual void SetYStep(double dY) = 0;
//--------------------------------------------------
/**
\brief Get Y-direction step
\param dY [in] Y-direction step
\return double
*/
//--------------------------------------------------
virtual double GetYStep() = 0;
//--------------------------------------------------
/**
\brief Set Valid Bits
\param emValidBits [in] Valid Bits value
\return void
*/
//--------------------------------------------------
virtual void SetValidBits(GX_VALID_BIT_LIST emValidBits) = 0;
//--------------------------------------------------
/**
\brief Get Valid Bits
\return Valid Bit
*/
//--------------------------------------------------
virtual GX_VALID_BIT_LIST GetValidBits() = 0;
//The extended adjustment parameters are added below and cannot be added to existing functions
//...
};
template class GXIAPICPP_API GXSmartPtr<IGXImageFormatConvert>;
typedef GXSmartPtr<IGXImageFormatConvert> CGXImageFormatConvertPointer;