📄 pixelprocessor.h
字号:
class FCPixelLens : public FCPixelBilinearDistord
{
public:
FCPixelLens (double fRefraction, BOOL bKeepBk) : m_fRefraction(FMax(1.0,fRefraction)), m_bKeepBk(bKeepBk) {}
virtual void OnEnterProcess (FCObjImage* pImg, RECT& rcImg) ;
protected:
virtual BOOL calc_undistorted_coord (int x, int y, double & un_x, double & un_y) const ;
protected:
double m_fRefraction ; // 必须大于1.0
BOOL m_bKeepBk ;
} ;
//=============================================================================
// 错切变形/skew transform (>=24 bit)
class FCPixelSkew : public FCPixelBilinearDistord
{
public:
FCPixelSkew (const POINT ptPos[4]) ;
virtual void OnEnterProcess (FCObjImage* pImg, RECT& rcImg) ;
protected:
virtual BOOL calc_undistorted_coord (int x, int y, double & un_x, double & un_y) const ;
protected:
POINT m_ptNewPos[4] ; // LT, RT, RB, LB
int m_nNewWidth ;
int m_nNewHeight ;
} ;
//=============================================================================
// 透镜变形/perspective transform (>=24 bit)
class FCPixelPerspective : public FCPixelBilinearDistord
{
public:
FCPixelPerspective (const POINT ptPos[4]) ;
virtual void OnEnterProcess (FCObjImage* pImg, RECT& rcImg) ;
protected:
virtual BOOL calc_undistorted_coord (int x, int y, double & un_x, double & un_y) const ;
protected:
POINT m_ptNewPos[4] ; // LT, RT, RB, LB
int m_nNewWidth ;
int m_nNewHeight ;
} ;
//=============================================================================
// 旋转/rotate image (>=24 bit)
class FCPixelRotate : public FCPixelBilinearDistord
{
public:
FCPixelRotate (int nAngle) ;
virtual void OnEnterProcess (FCObjImage* pImg, RECT& rcImg) ;
protected:
virtual BOOL calc_undistorted_coord (int x, int y, double & un_x, double & un_y) const ;
protected:
double m_fAngle, m_fInvAngle ;
int m_nNewWidth, m_nNewHeight ;
} ;
//=============================================================================
// 带形/ribbon (>=24 bit)
class FCPixelRibbon : public FCPixelBilinearDistord
{
public:
// nSwing : 振幅[0..100],此值为一百分比
// nFrequency : 频率>=0,每10为一个pi
FCPixelRibbon (int nSwing, int nFrequency) ;
virtual void OnEnterProcess (FCObjImage* pImg, RECT& rcImg) ;
protected:
virtual BOOL calc_undistorted_coord (int x, int y, double & un_x, double & un_y) const ;
protected:
int m_nSwing, m_nFreq ;
int m_nDelta ;
std::deque<int> m_ShiftDown ;
} ;
//=============================================================================
// 波纹/ripple (>=24 bit)
class FCPixelRipple : public FCPixelBilinearDistord
{
public:
FCPixelRipple (int nWavelength, int nAmplitude, BOOL bSinType = TRUE) ;
protected:
virtual BOOL calc_undistorted_coord (int x, int y, double & un_x, double & un_y) const ;
private:
double shift_amount (int nPos) const ;
private:
int m_nWavelength ;
int m_nAmplitude ;
BOOL m_bSinType ;
} ;
//=============================================================================
// tile (>=24 bit)
class FCPixelSmallTile : public FCPixelBilinearDistord
{
public:
FCPixelSmallTile (int nXNum, int nYNum) : m_nXNum(FMax(1,nXNum)), m_nYNum(FMax(1,nYNum)) {}
protected:
virtual BOOL calc_undistorted_coord (int x, int y, double & un_x, double & un_y) const ;
protected:
int m_nXNum ;
int m_nYNum ;
} ;
//=============================================================================
// 图象卷积运算/image convolute (>= 24 bit)
class FCPixelConvolute : public FCSinglePixelProcessBase
{
public:
// nElements为从矩阵左上角开始的数组, iBlockLen为矩阵宽度(正方形)
FCPixelConvolute () ;
virtual ~FCPixelConvolute() ;
void SetKernel (const int * nElements, int iBlockLen, int iDivisor, int nOffset = 0) ;
virtual void OnEnterProcess (FCObjImage* pImg, RECT& rcImg) ;
virtual void ProcessPixel (FCObjImage* pImg, int x, int y, BYTE* pPixel) ;
private:
int * m_pElement ;
int m_iBlock, m_iDivisor, m_nOffset ;
} ;
//=============================================================================
// 标准高斯模糊/regular gaussian blur (>=24 bit)
class FCPixelGaussianBlur3x3 : public FCPixelConvolute
{
public:
FCPixelGaussianBlur3x3 () ;
} ;
class FCPixelGaussianBlur5x5 : public FCPixelConvolute
{
public:
FCPixelGaussianBlur5x5 () ;
} ;
//=============================================================================
// 边缘检测/detect edges (>=24 bit)
class FCPixelDetectEdges : public FCPixelConvolute
{
public:
FCPixelDetectEdges (int nRadius = 3) ; // nRadius >= 1
} ;
//=============================================================================
// 锐化/sharp (>=24 bit)
class FCPixelSharp : public FCPixelConvolute
{
public:
FCPixelSharp (int nStep) ; // (>=1)
} ;
//=============================================================================
// 1, 4, 8, 24, 32 ==> 16
class FCPixelConvertTo16Bit : public FCSinglePixelProcessBase
{
protected:
virtual BOOL ValidateColorBits (const FCObjImage* pImg) ;
virtual void ProcessPixel (FCObjImage* pImg, int x, int y, BYTE* pPixel) ;
virtual void OnEnterProcess (FCObjImage* pImg, RECT& rcImg) ;
} ;
//=============================================================================
// 1, 4, 8, 16, 24, 32 ==> 8bit gray
class FCPixelConvertTo8BitGray : public FCSinglePixelProcessBase
{
protected:
virtual BOOL ValidateColorBits (const FCObjImage* pImg) ;
virtual void ProcessPixel (FCObjImage* pImg, int x, int y, BYTE* pPixel) ;
virtual void OnEnterProcess (FCObjImage* pImg, RECT& rcImg) ;
} ;
//=============================================================================
/// Quantize image.
class FCPixelConvertQuantize : public FCSinglePixelProcessBase
{
public:
/// @param nBPP : 1 or 4 or 8
FCPixelConvertQuantize (int nBPP) : m_nBPP(nBPP) {}
private:
virtual BOOL ValidateColorBits (const FCObjImage* pImg) ;
virtual void OnEnterProcess (FCObjImage* pImg, RECT& rcImg) ;
int m_nBPP ;
};
//=============================================================================
// 导出成ASCII文件/save a ASCII text file
class FCPixelExportAscII : public FCSinglePixelProcessBase
{
public:
FCPixelExportAscII (const char* szFileName) ;
virtual void ProcessPixel (FCObjImage* pImg, int x, int y, BYTE* pPixel) ;
virtual void OnEnterProcess (FCObjImage* pImg, RECT& rcImg) ;
protected:
char m_chIndex[95] ;
int m_nGray[95] ;
std::ofstream m_outFile ;
} ;
//=============================================================================
// 分离RGB通道/splite RGB channel (>=24 bit)
class FCPixelSpliteChannel_RGB : public FCSinglePixelProcessBase
{
public:
FCPixelSpliteChannel_RGB (FCObjImage * pImgR, FCObjImage * pImgG, FCObjImage * pImgB) : m_pImgR(pImgR), m_pImgG(pImgG), m_pImgB(pImgB) {}
virtual void ProcessPixel (FCObjImage* pImg, int x, int y, BYTE* pPixel) ;
virtual void OnEnterProcess (FCObjImage* pImg, RECT& rcImg) ;
protected:
FCObjImage * m_pImgR, * m_pImgG, * m_pImgB ;
} ;
//=============================================================================
// 合并RGB通道/combine RGB channel, 通道位图必须为8bit, 宽高必须一样
class FCPixelCombineChannel_RGB : public FCSinglePixelProcessBase
{
public:
FCPixelCombineChannel_RGB (FCObjImage * pImgR, FCObjImage * pImgG, FCObjImage * pImgB) : m_pImgR(pImgR), m_pImgG(pImgG), m_pImgB(pImgB) {}
virtual BOOL ValidateColorBits (const FCObjImage* pImg) ;
virtual void ProcessPixel (FCObjImage* pImg, int x, int y, BYTE* pPixel) ;
protected:
FCObjImage * m_pImgR, * m_pImgG, * m_pImgB ;
} ;
//*****************************************************************************
//*****************************************************************************
// 统计出现的颜色个数/count image's number of color (>=24 bit)
class FCPixelColorsCount : public FCSinglePixelProcessBase
{
public:
UINT GetColorsNumber () const {return m_nCount;}
virtual void ProcessPixel (FCObjImage* pImg, int x, int y, BYTE* pPixel) ;
virtual void OnEnterProcess (FCObjImage* pImg, RECT& rcImg) ;
virtual void OnLeaveProcess (FCObjImage * pImg) ;
protected:
UINT m_nCount ;
BYTE * m_pMap ;
} ;
//=============================================================================
// 得到一个不在图像中出现的颜色,作透明色 (>=24 bit)
class FCPixelGetKeyColor : public FCPixelColorsCount
{
public:
BOOL IsFind () const {return m_bFind;}
RGBQUAD GetKeyColor () const {return m_crKey;}
FCPixelGetKeyColor () {m_bFind = FALSE;}
virtual void OnLeaveProcess (FCObjImage * pImg) ;
protected:
BOOL m_bFind ;
RGBQUAD m_crKey ;
} ;
//=============================================================================
// inline implement
//=============================================================================
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -