//:implementationoftheCPointProclass.
//
/////////////////////////////////////////////////////////////////bject)
//
//基本功能:本函数将传入的CDibObject对象中的图像从彩色转换为灰度图像。
//如果进行此调整之前没有指定一个CDibObject对象指针,则必须在
//调整时加以指定。
//
//参数说明:BYTEmGrayType0:Y=++
//1:Y=R
//2:Y=G
//3:Y=B
//CDibObject*pDibObject,默认为NULL。
//
//返回:成功返回TRUE,失败返回FALSE。
//
////////////////////////////////////////////////////////////////////////BOOLCPointPro::MakeGray256(BYTEmGrayType,
CDibObject*pDibObject){
//CDibObject对象指针
if(pDibObject!=NULL)m_pDibObject=pDibObject;
//若未指定CDibObject对象指针返回FALSE
if(m_pDibObject==NULL)return(FALSE);
//低于位的图像不进行处理
if(m_pDibObject->GetNumBits()<8)return(FALSE);
//获取原图像字节宽度和转换后的位色灰度图像的字节宽度
intnOldWidthBytes,nNewWidthBytes;
char*pBuffer=(char*)m_pDibObject->GetDIBPointer(&nOldWidthBytes,8,&nNewWidthBytes);if(pBuffer==NULL)return(FALSE);
//定义变量
BITMAPINFOHEADER*pOldBIH,*pNewBIH;
BITMAPFILEHEADER*pOldBFH,*pNewBFH;
RGBQUAD*pOldRGBPalette,*pNewRGBPalette;unsignedchar*pOldBits,*pNewBits,*pTemp,*pNewTemp;intnNumColors,nNumNewColors;
//获取文件头指针
pOldBFH=(BITMAPFILEHEADER*)pBuffer;
//获取信息头指针
pOldBIH=(BITMAPINFOHEADER*)&pBuffer[sizeof(BITMAPFILEHEADER)];
//获取调色板指针
pOldRGBPalette=(RGBQUAD*)&pBuffer[sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)];
//原图像颜色数
nNumColors=m_pDibObject->GetNumColors();
//新图像颜色数
nNumNewColors=256;
//获取原图像数据指针pOldBits=(unsignedchar*)&pBuffer[sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+nNumColors*sizeof(RGBQUAD)];
//为新图像分配内存
HGLOBALhGlobal;//新图像总字节数DWORDdwSize;
dwSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD)+
m_pDibObject->GetHeight()*nNewWidthBytes;
hGlobal=::GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,dwSize);if(hGlobal==NULL)
{
::GlobalUnlock(m_pDibObject->GetDib());return(FALSE);
}
pBuffer=(char*)::GlobalLock(hGlobal);if(pBuffer==NULL)
{
::GlobalFree(hGlobal);
::GlobalUnlock(m_pDibObject->GetDib());return(FALSE);
}
//获得新图像的文件头指针
pNewBFH=(BITMAPFILEHEADER*)pB
绘制灰度直方图 源代码 来自淘豆网m.daumloan.com转载请标明出处.