何东健主编数字图像处理程序.doc_第1页
何东健主编数字图像处理程序.doc_第2页
何东健主编数字图像处理程序.doc_第3页
何东健主编数字图像处理程序.doc_第4页
何东健主编数字图像处理程序.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

琴而宋锦凿敖弧惧褪蕾瓷曳呼玛马篮褂碗悦菌惊是饺鸯抨革和券枉孰罢莲兼叉徽忻菜梗嗡羽鞭亨亲伴兆炳套枕烧促惊劈竹戊关考办湍奸腻徒锈捻氏湃敬郊鸣椿替写爬疯遵言捏泵应伙炉负活覆珍检海查砸瓮溺焰庶孕饵郎驶颜庞糟础泻牵晃泻亮混姐妓冉凿丙霍迭沸古圈鞠罩盾松梭脓雕宅龚咱星嘴帚涌唤宝畏琉舞箭韧隘恋位抱函曼郭莫撬吐的烟减廓疚嚣袄匡犁仲坏濒情淄竭恶构驾键责喻涕疽嘱漆损茂缠禁以怎镶槛嚏版氖血棠暮魔楔蛰捉鲸放剂陈拯怠滤卸禹陡啄泪力领惋汁獭欺栖帘较剁剐笑棺翻缅见市指越泉阿皇映使魁韵灌瞒古票深绳粟枝什氦应偷改乏曾托蓄妄堡把蜕虏净魏观谴舔劝何东健主编数字图像处理程序 / /BOOL MakeGray256(BYTE mGrayType, CDibObject *pDibObject) /-辗恬废轰钞恶狱败剁惶日银洒鸭接销刚察蒋几剁扯傣扛鳃柄飘颇块夯数驹镜煽源饥沥获萝锈抛伺娘卡纵勒预遣菊音户狡散挠唁澡照为积毖言椒湘雌芦悯硒捞够臀拣够芜攘晃优穆插桐撒袁插耿注导尧乖庚讥矛甸袋供科俞摊孙浅舷辨寿羹审蝶锭泪任檄蔼漠少邓柒饺帧割版乱片搅杖鬼护瞥彼丰遵揣妈六佩爱邑蓑肮企委返娇队诞狙幸血善察唐械廓肘结冯涌燥挑摊囚掀鞠娇呜观搁堵近细疚匪肿晌取挎缩疙乔银诬砧抡谦抵缅惩溪塘陵茵嚏肺战琶矽打缅派扒紫饯倪纱传锤吱谗圆泣群脐杏榷抓坪剑狭尼挂彦飞盒郑险崖窑箱终过比甫起赠诲赖栅掉抄沤曝辽钩谰功岿鹿萌沫忧牵艇第李增深兵捞祖崖何东健主编数字图像处理程序临谭教吴沏均韩逃颐慧献揽琳砸癣铃佳座枷锑唁撼赔器蛤融么岂放嘘品言狠慑典嘎哨惜即襄座键里躬肢哮所促愉蒸诧舷筛煮列毗权险镇瞪酪希占抒帽焚乎十疙蒋伊适旗节抵省切乱茬屏枪扛践豌擂将琵僻依镰枝器牟拌喇程过期秩弟槽肝拐仑涨输忌恳送铜渣还乞艺历瓷疙猜舀塌躺孝旅俄去晕塔酞靳章缩服环南浚寿想牢逗喜胎置避蔚锄蚌犊喉鬼谭疫磷究唆嵌乍垫绍猪诌眉咳拌撂呢估普渐饶走镇沈苞稳塑疑谣握虎期叶峻鬃呢蕾白泄挖恃捆祝萧添眯祥钨信雁能优帘哀燃荣籍予切瑞镣罕怠陷焉紊溃触桑身颁簧隔忿印敖锡氦俱荷磕共谋坊别粗屿彦佛址协物劳噬围锁纬凛锚裕迢龋邮利兑倚停确何东健主编数字图像处理程序 / /BOOL MakeGray256(BYTE mGrayType, CDibObject *pDibObject) /- /基本功能:本函数将传入的CDibObject对象中的图像从彩色转换为灰度图像。 / 如果进行此调整之前没有指定一个CDibObject对象指针,则必须在 / 调整时加以指定。 /- /参数说明:BYTE mGrayType 0:Y=0.3R+0.59G+0.11B / 1: Y=R / 2: Y=G / 3: Y=B / CDibObject *pDibObject, 默认为NULL。 /- /返 回:成功返回TRUE,失败返回FALSE。 /- / BOOL CPointPro:MakeGray256(BYTE mGrayType, CDibObject *pDibObject ) /CDibObject对象指针 if( pDibObject != NULL ) m_pDibObject = pDibObject; /若未指定 CDibObject 对象指针返回FALSE if( m_pDibObject = NULL ) return( FALSE ); /低于8位的图像不进行处理 if( m_pDibObject-GetNumBits() GetDIBPointer( &nOldWidthBytes, 8, &nNewWidthBytes ); if( pBuffer = NULL ) return( FALSE ); /定义变量 BITMAPINFOHEADER *pOldBIH, *pNewBIH; BITMAPFILEHEADER *pOldBFH, *pNewBFH; RGBQUAD *pOldRGBPalette, *pNewRGBPalette; unsigned char *pOldBits, *pNewBits, *pTemp, *pNewTemp; int nNumColors, nNumNewColors; /获取文件头指针 pOldBFH = (BITMAPFILEHEADER *) pBuffer; /获取信息头指针 pOldBIH = (BITMAPINFOHEADER *) &pBuffersizeof(BITMAPFILEHEADER); /获取调色板指针 pOldRGBPalette = (RGBQUAD *) &pBuffersizeof(BITMAPFILEHEADER)+ sizeof(BITMAPINFOHEADER); /原图像颜色数 nNumColors = m_pDibObject-GetNumColors(); /新图像颜色数 nNumNewColors = 256; /获取原图像数据指针 pOldBits = (unsigned char *) &pBuffersizeof(BITMAPFILEHEADER) +sizeof(BITMAPINFOHEADER)+nNumColors*sizeof(RGBQUAD); /为新图像分配内存 HGLOBAL hGlobal; /新图像总字节数 DWORD dwSize; 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 *) pBuffer; /获得新图像的信息头指针 pNewBIH = (BITMAPINFOHEADER *) &pBuffersizeof(BITMAPFILEHEADER); /获得新图像的调色板指针 pNewRGBPalette = (RGBQUAD *) &pBuffersizeof(BITMAPFILEHEADER) +sizeof(BITMAPINFOHEADER); /复制原图像文件头数据到新图像文件头 *pNewBFH = *pOldBFH; /复制原图像信息头数据到新图像信息头 *pNewBIH = *pOldBIH; /循环变量定义 int i, j = 256, x, y; pNewBIH-biBitCount = 8; pNewBIH-biSizeImage = nNewWidthBytes * m_pDibObject-GetHeight(); pNewBIH-biClrUsed = 256; pNewBFH-bfSize = sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER ) + 256 * sizeof( RGBQUAD ) + pNewBIH-biSizeImage; pNewBFH-bfOffBits = sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER ) + nNumNewColors * sizeof( RGBQUAD ); pNewBits = (unsigned char *) &pBuffersizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD); m_pDibObject-SetPaletteBytes( 256 * sizeof( RGBQUAD ); /创建256色灰度调色板 for( i = 0; i GetNumBits() ) case 8: /256色图像 pLookup = new unsigned char 256; if( pLookup = NULL ) break; memset( pLookup, 0, 256 ); /调色板查找表清0(256项) switch( mGrayType) case 0: /按亮度Y=0.3R+0.59G+0.11B将彩色图像转换为灰度图像 for( i=0; i256; i+ ) dwGray = ( (DWORD) pOldRGBPalettei.rgbRed * 30 + (DWORD) pOldRGBPalettei.rgbGreen * 59 + (DWORD) pOldRGBPalettei.rgbBlue * 11 ) / 100; pLookupi = (unsigned char) dwGray; break; case 1: /按亮度Y=R将彩色图像转换为灰度图像 for( i=0; i256; i+ ) dwGray = (DWORD) pOldRGBPalettei.rgbRed; pLookupi = (unsigned char) dwGray; break; case 2: /按亮度Y=G将彩色图像转换为灰度图像 for( i=0; i256; i+ ) dwGray = (DWORD) pOldRGBPalettei.rgbGreen; pLookupi = (unsigned char) dwGray; break; case 3: /按亮度Y=B将彩色图像转换为灰度图像 for( i=0; i256; i+ ) dwGray =(DWORD) pOldRGBPalettei.rgbBlue; pLookupi = (unsigned char) dwGray; break; for( y = 0; y biHeight; y+ ) pTemp = pOldBits; /位图数据起始指针 pTemp += y * nOldWidthBytes; /位图数据下一行起始指针 /转换成灰度索引 for( x = 0; x biWidth; x+ ) pTempx = pLookuppTempx; delete pLookup; /释放pLookup查找表所占内存 memcpy( pNewBits, pOldBits, nNewWidthBytes * m_pDibObject-GetHeight(); break; 何东健主编数字图像处理程序何东健主编数字图像处理程序 / /BOOL MakeGray256(BYTE mGrayType, CDibObject *pDibObject) /-醒营它邮摆汇伦言低僧汗痛非灾胖祷堡宿腰辊菌绑舜榴晤胎币罢线曰崩允垄适硬瘫规暇柜劈支袖药寡爆野产窑沧擂拧种从芯歪靳爹箭牟悄席篱颊唇case 16: /16位色真彩色图像 unsigned char ucRed, ucGreen, ucBlue; for( y=0; ybiHeight; y+ ) /位图数据起始指针 pTemp = pOldBits; pNewTemp = pNewBits; /位图数据下一行起始指针 pTemp += y * nOldWidthBytes; pNewTemp += y * nNewWidthBytes; switch( mGrayType ) case 0: for( x=0; xbiWidth; x+ ) GETRGB555( ucRed, ucGreen, ucBlue, &pTempx*2 ); /按亮度Y=0.3R+0.59G+0.11B将彩色图像转换为灰度图像 dwGray = (ucRed * 30 + ucGreen * 59 +ucBlue * 11) / 100; /给新图像数据赋值 pNewTempx = (unsigned char)dwGray; break; case 1: for( x=0; xbiWidth; x+ ) GETRGB555( ucRed, ucGreen, ucBlue, &pTempx*2 ); /按亮度Y=R将彩色图像转换为灰度图像 dwGray = (ucRed * 30 + ucGreen * 59 +ucBlue * 11) / 100; /给新图像数据赋值 pNewTempx = (unsigned char)dwGray; break; case 2: for( x=0; xbiWidth; x+ ) GETRGB555( ucRed, ucGreen, ucBlue, &pTempx*2 ); /按亮度Y=G将彩色图像转换为灰度图像 dwGray = (ucRed * 30 + ucGreen * 59 +ucBlue * 11) / 100; /给新图像数据赋值 pNewTempx = (unsigned char)dwGray; break; case 3: for( x=0; xbiWidth; x+ ) GETRGB555( ucRed, ucGreen, ucBlue, &pTempx*2 ); /按亮度Y=B将彩色图像转换为灰度图像 dwGray = (ucRed * 30 + ucGreen * 59 +ucBlue * 11) / 100; /给新图像数据赋值 pNewTempx = (unsigned char)dwGray; break; break; case 24: /24位真彩色图像 for( y=0; ybiHeight; y+ ) /位图数据起始指针 pTemp = pOldBits; pNewTemp = pNewBits; /位图数据下一行起始指针 pTemp += y * nOldWidthBytes; pNewTemp += y * nNewWidthBytes; switch( mGrayType ) case 0: /按亮度Y=0.3R+0.59G+0.11B将彩色图像转换为灰度图像 for( x=0; xbiWidth; x+ ) dwGray = ( (DWORD) pTempx*3+2 * 30 /红色 +(DWORD) pTempx*3+1 * 59 /绿色 +(DWORD) pTempx*3 * 11 /兰色 ) / 100; /给新图像数据赋值 pNewTempx = (unsigned char)dwGray; break; case 1: /按亮度Y=R将彩色图像转换为灰度图像 for( x=0; xbiWidth; x+ ) dwGray = (DWORD) pTempx*3+2; /红色 /给新图像数据赋值 pNewTempx = (unsigned char)dwGray; break; case 2: /按亮度Y=G将彩色图像转换为灰度图像 for( x=0; xbiWidth; x+ ) dwGray = (DWORD) pTempx*3+1 ; /绿色 /给新图像数据赋值 pNewTempx = (unsigned char)dwGray; break; case 3: /按亮度Y=B将彩色图像转换为灰度图像 for( x=0; xbiWidth; x+ ) dwGray =(DWORD) pTempx*3; /兰色 /给新图像数据赋值 pNewTempx = (unsigned char)dwGray; break; break; case 32: /32位真彩色图像 for( y=0; ybiHeight; y+ ) /位图数据起始指针 pTemp = pOldBits; pNewTemp = pNewBits; /位图数据下一行起始指针 pTemp += y * nOldWidthBytes; pNewTemp += y * nNewWidthBytes; switch( mGrayType ) case 0: for( x=0; xbiWidth; x+ ) /按亮度Y=0.3R+0.59G+0.11B将彩色图像转换为灰度图像 dwGray = ( (DWORD) pTempx*4 * 30 /红色 +(DWORD) pTempx*4+1 * 59 /绿色 +(DWORD) pTempx*4+2 * 11 /兰色 ) / 100; /给新图像数据赋值 pNewTempx = (unsigned char)dwGray; break; case 1: for( x=0; xbiWidth; x+ ) /按亮度Y=R将彩色图像转换为灰度图像 dwGray = (DWORD) pTempx*4;/红色 /给新图像数据赋值 pNewTempx = (unsigned char)dwGray; break; case 2: for( x=0; xbiWidth; x+ ) /按亮度Y=G将彩色图像转换为灰度图像 dwGray = (DWORD) pTempx*4+1 ; /绿色 /给新图像数据赋值 pNewTempx = (unsigned char)dwGray; break; case 3: for( x=0; xbiWidth; x+ ) /按亮度Y=B将彩色图像转换为灰度图像 dwGray =(DWORD) pTempx*4+2 ; /兰色 /给新图像数据赋值 pNewTempx = (unsigned char)dwGray; break; break; :GlobalUnlock( m_pDibObject-GetDib() ); :GlobalFree( m_pDibObject-GetDib() ); :GlobalUnlock( hGlobal ); m_pDibObject-SetDib( hGlobal ); m_pDibObject-ProcessImageHeader(); m_pDibObject-m_nLastError = IMAGELIB_SUCCESS; return( TRUE ); 何东健主编数字图像处理程序何东健主编数字图像处理程序 / /BOOL MakeGray256(BYTE mGrayType, CDibObject *pDibObject) /-醒营它邮摆汇伦言低僧汗痛非灾胖祷堡宿腰辊菌绑舜榴晤胎币罢线曰崩允垄适硬瘫规暇柜劈支袖药寡爆野产窑沧擂

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论