///////////////////////图像处理函数//////////////////////////////////////
void ChangeBrightness(CDib* pOrigDib, int nChange);//nChange是亮度的改变量
//改变图像亮度 pOrigDib 为原先的图像
void ChangeContrast(CDib* pOrigDib, int nChange);//nChange是对比度的改变量
//改变图像对比度 pOrigDib 为原先的图像
void Render(CDib* pOrigDib, BYTE byRed, BYTE byGreen, BYTE byBlue);
//着色
void Scale(CDib* pOrigDib, int nWidth, int nHeight);
//缩放图像,pOrigDib 为原先的图像,nWidth为缩放后的宽度, nHeight为缩放后的高度
void Rotate(CDib* pOrigDib, int nXCenter, int nYCenter, float fTheta);
//旋转图像,pOrigDib为原图,(nXCenter,nYCenter)为旋转中心的坐标,fTheta为旋转角度
void MirrorX(CDib* pOrigDib, int x, int y, int nWidth, int nHeight);
//垂直方向的镜像变换,(x,y)为起始点,nWidth,nHeight为镜像变换的区域
void MirrorY(CDib* pOirgDib, int x, int y, int nWidth, int nHeight);
//水平方向的镜像变换,(x,y)为起始点,nWidth,nHeight为镜像变换的区域
void ConvolutionFilter(CDib* pOrigDib, int* pnKernel, int nRows, int nCols);
//卷积滤波器,pnKernel为 nRows * nCols 的卷积核
void PercentileFilter(CDib* pOrigDib, int nPercentage, int nRows, int nCols);
//百分比滤波器, nPercentage确定百分比, 模板为 nRows * nCols
void ReverseColor(); //图像反色,原先x, 变为255 - x
void DibCopy(CDib* pOrigDib); //重载 = 操作
void ClipRect(CDib* pDib, int x, int y, int nWidth, int nHeight); //剪切操作
////////////////////////////////////////////////////////////////////////////////
/////////////////文件存取函数///////////////////////////////////////////////////
void SaveToBMPFile(const char* pstFileName); //存为位图文件,按其自身的位数存储
void SaveToJPGFile(const char* pszJpgFileName,int nQuality); //存为JPG文件
void LoadFromJPGFile(const char* psrFileName); //从JPG文件中读取
void LoadFromBMPFile(const char* pszDibFileName); //从BMP文件中读取
void SaveAs256Bitmap(const char *pszDibFileName); //存为256色位图
void SaveAsBWBitmap(const char *pszDibFileName); //存为单色位图
void SaveAs256GrayBitmap(const char *pszDibFileName); //存为256级灰度位图
void SaveAs24BitBMPFile(const char* pstFileName); //存为24位位图
////////////////////////////////////////////////////////////////////////////////
////////////////图像格式转换函数////////////////////////////////////////////////
bool GetHistValue(int nModulus, int nCoef, int* pRed, int* pGreen, int* pBlue, int* pGray);
//取得直方图的统计数值
bool ChangeTo256Gray(CDib* pOrigDib = NULL);
//将图像转换成256色灰度图,pOrigDib为待转换的图像,缺省则转换自身
void SetTo256Gray();
bool ChangeToBW(CDib* pOrigDib = NULL, int byCritical = 128);
//二值化,BW: black & white, byCritical为阈值,缺省为128
void SetToBW();
void QuantizeColor(LPBYTE lpbyDibBits24, int nScanWidth, int nScanHeight, LPBYTE lpbyDibBits8, CPalette* pPalette);
//对颜色进行量化, 结果被保存在逻辑调色盘pPalette中, 同时将24位数据量化为8位数据, 并存放于lpbyDdbBits8之中
//该算法保留系统默认的20种静态颜色
void SetTo24Bitmap(); //格式转换,置颜色深度为24位真彩色
void SetTo256Color(); //格式转换, 置颜色深度为256色(8位)
//////////////////////////////////////////////////////////////////////////////////
#ifdef _DEBUG
virtual void Dump(CDumpContext& dc) const;
virtual void AssertValid() const;
#endif
private:
void Sort(int *p, int length);
//methods
void Init();
int IncreaseContrast(int nOrigColor,int nChange);
//OrigColor为原值,函数返回改变后的值
int DecreaseContrast(int nOrigColor,int nChange);
BYTE* GetDib24Bit(DWORD nOrigSize, int nWidth, int nHeight);
//将图像格式转换为24位
HPALETTE CreateBitmapPalette();
//attributes
BYTE m_byUpper; //像素颜色的上阀值
BYTE m_byLower; //像素颜色的下阀值
};
#endif/*///////////////////////////////////////////////////////////////////////
// End of file 'Dib.h' //
/////////////////////////////////////////////////////////////////////////////*/