#ifndef __GdImageLib_H__ #define __GdImageLib_H__ #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif #include "./include/ffmpeg4.0/libavcodec/avcodec.h" #include "./include/ffmpeg4.0/libswscale/swscale.h" #ifdef __cplusplus } #endif extern unsigned char IRImage_ColorTable[9][256][4]; static class GdImageLib { private: GdImageLib(); public: /************************************************************************ ** ** 功能描述:将Y16数据映射成Y8数据 ** 输入参数: ** psh16BitData Y16数据 ** nDataLen 数据长度(像素个数) ** nBrightness 亮度 ** nContrast 对比度 ** 输出参数: ** pby8BitData Y8数据 ** 返回值:无 ** 其它说明:无 ** ************************************************************************/ static void Map16BitTo8Bit_u(unsigned char* pby8BitData, unsigned short *psh16BitData, int nDataLen, int nBrightness = 100, int nContrast = 100); /************************************************************************ ** ** 功能描述:将Y16数据映射成Y8数据 ** 输入参数: ** psh16BitData Y16数据 ** nDataLen 数据长度(像素个数) ** nBrightness 亮度 ** nContrast 对比度 ** 输出参数: ** pby8BitData Y8数据 ** 返回值:无 ** 其它说明:无 ** ************************************************************************/ static void Map16BitTo8Bit(unsigned char* pby8BitData, short* psh16BitData, int nDataLen, int nBrightness = 100, int nContrast = 100); /************************************************************************ ** ** 功能描述:将灰度数据映射成RGBA数据 ** 输入参数: ** pGrey8 Y16数据 ** nImageWidth 图像宽度 ** nImageHeight 图像高度 ** nColorTableIndex 颜色表索引 ** 输出参数: ** pRGBA RGBA数据 ** 返回值:无 ** 其它说明:无 ** ************************************************************************/ static bool Grey8ToRGBA(unsigned char *pRGBA, unsigned char *pGrey8, int nImageWidth, int nImageHeight, int nColorTableIndex = 0); /************************************************************************ ** ** 功能描述:对图像进行上下翻转 ** 输入参数: ** pImgData 图像数据(翻转前) ** nWidth 图像宽度 ** nHeight 图像高度 ** nBytesOfPixel 每个像素所占字节数 ** 输出参数: ** pImgData 图像数据(翻转后) ** 返回值:无 ** 其它说明:无 ** ************************************************************************/ static void Flip(unsigned char *pImgData, int nWidth, int nHeight, int nBytesOfPixel); /************************************************************************ ** ** 功能描述:对图像进行左右镜像 ** 输入参数: ** pImgData 图像数据(翻转前) ** nWidth 图像宽度 ** nHeight 图像高度 ** nBytesOfPixel 每个像素所占字节数 ** 输出参数: ** pImgData 图像数据(翻转后) ** 返回值:无 ** 其它说明:无 ** ************************************************************************/ static void Mirror(unsigned char *pImgData, int nWidth, int nHeight, int nBytesOfPixel); /************************************************************************ ** ** 功能描述:对图像进行上下翻转和左右镜像 ** 输入参数: ** pImgData 图像数据(翻转前) ** nWidth 图像宽度 ** nHeight 图像高度 ** nBytesOfPixel 每个像素所占字节数 ** 输出参数: ** pImgData 图像数据(翻转后) ** 返回值:无 ** 其它说明:无 ** ************************************************************************/ static void FlipAndMirror(unsigned char *pImgData, int nWidth, int nHeight, int nBytesOfPixel); /************************************************************************ ** ** 功能描述:将图像顺时针旋转90度 ** 输入参数: ** pImageData_Src 图像数据(旋转前) ** nImageWidth_Src 图像宽度(旋转前) ** nImageHeight_Src 图像高度(旋转前) ** nBytesOfPixel 每个像素所占字节数 ** 输出参数: ** pImageData_Dest 图像数据(旋转后) ** nImageWidth_Dest 图像宽度(旋转后) ** nImageHeight_Dest 图像高度(旋转后) ** 返回值:无 ** 其它说明:无 ** ************************************************************************/ static void Rorate90(unsigned char* pImageData_Dest, int& nImageWidth_Dest, int& nImageHeight_Dest, unsigned char* pImageData_Src, int nImageWidth_Src, int nImageHeight_Src, int nBytesOfPixel); /************************************************************************ ** ** 功能描述:顺时针旋转180度 ** 输入参数: ** pImageData_Src 图像数据(旋转前) ** nImageWidth_Src 图像宽度(旋转前) ** nImageHeight_Src 图像高度(旋转前) ** nBytesOfPixel 每个像素所占字节数 ** 输出参数: ** pImageData_Dest 图像数据(旋转后) ** nImageWidth_Dest 图像宽度(旋转后) ** nImageHeight_Dest 图像高度(旋转后) ** 返回值:无 ** 其它说明:无 ** ************************************************************************/ static void Rorate180(unsigned char* pImageData_Dest, int& nImageWidth_Dest, int& nImageHeight_Dest, unsigned char* pImageData_Src, int nImageWidth_Src, int nImageHeight_Src, int nBytesOfPixel); /************************************************************************ ** ** 功能描述:顺时针旋转270度 ** 输入参数: ** pImageData_Src 图像数据(旋转前) ** nImageWidth_Src 图像宽度(旋转前) ** nImageHeight_Src 图像高度(旋转前) ** nBytesOfPixel 每个像素所占字节数 ** 输出参数: ** pImageData_Dest 图像数据(旋转后) ** nImageWidth_Dest 图像宽度(旋转后) ** nImageHeight_Dest 图像高度(旋转后) ** 返回值:无 ** 其它说明:无 ** ************************************************************************/ static void Rorate270(unsigned char* pImageData_Dest, int& nImageWidth_Dest, int& nImageHeight_Dest, unsigned char* pImageData_Src, int nImageWidth_Src, int nImageHeight_Src, int nBytesOfPixel); static bool ffmpeg_init(); static void ffmpeg_uninit(); /************************************************************************ ** ** 功能描述:顺时针旋转180度 ** 输入参数: ** pImageData_Src 源图像数据 ** srcFmt 源图像格式 ** nImageWidth_Src 源图像宽度 ** nImageHeight_Src 源图像高度 ** 输出参数: ** pImageData_Dest 目标图像数据 ** dstFmt 目标图像格式 ** nImageWidth_Dest 目标图像宽度 ** nImageHeight_Dest 目标图像高度 ** 返回值:无 ** 其它说明:无 ** ************************************************************************/ static bool Convert(unsigned char* pImageData_Dest, AVPixelFormat dstFmt, int nImageWidth_Dest, int nImageHeight_Dest, unsigned char* pImageData_Src, AVPixelFormat srcFmt, int nImageWidth_Src, int nImageHeight_Src); private: static int m_nImageWidth_Src; static int m_nImageHeight_Src; static int m_nImageWidth_Dest; static int m_nImageHeight_Dest; static int m_nLineSize_Src[8]; static int m_nLineSize_Dest[8]; static unsigned char* m_pImageData_Src; static unsigned char* m_pImageData_Dest; static unsigned char* m_lineData_Src[8]; static unsigned char* m_lineData_Dest[8]; static AVPixelFormat m_pPixelFmt_Src; static AVPixelFormat m_pPixelFmt_Dest; static SwsContext* m_pConvert; static bool m_bUpdate; static QMutex m_mutexConvert; // static QVector > m_varColorTable; static bool m_bInitColorTable; }; #endif // __GdImageLib_H__