




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
保存处理PAGEPAGE10————————————————————————————————作者:————————————————————————————————日期:,,,,256采BMP由于在实际工程和效果验证经常256压缩P,例通过黑白采集卡采得到是,所我们在讲座范例所都是BMP灰果能够作到熟练于BMP操作。BP作indows,性我们在讲过那,是8bit,是黑白效果黑灰(作〕值0,最白灰值255,灰值随机布在255,黑,灰0,白(),灰于5是在B分是并且256我们对给操作灰BMP实码。、BMP操作 首先我们回忆讲重:BMP包括头构造BTMAPFLEHEAER头构造 BIAPINFOEADER、颜表GQUAD和四局部时根构造大小宽高现调板值里注意在行值填充四字节边界,存储长四字节,缺乏时将0填充。述知识场写序关平台何序问题再赘述用面向象虽然面向封装起来保护不外界干扰,提高平安,平安降低执行为代价此,充利序档视构造序直接使AI函来微软SDN名look子,该子演示何作Dib兴趣参考,定获。启动 isul ,生成名Dib档序,将Viw基类设olliew,目显示时支持滚动条另外序档(CDibDoc.h〕声明宏及公变量: 最后将序字符串表字符串资源IR_DiE修改:nDb\\Di\ibF.b\\n.bnDb.DocumentnDumet目序话框选择BP或DIB1取BP根B构造P入此充利档视构造重载挡Onment()函户自动生成序翻话框选择,然后序将自动调该函执行。该函数的实现代码如下所示: 上面的方法是通过CFile类对象的操作来读取位图文件的,它需要分析位图中的文件头信息,从而确定需要读取的图像长度。这种方法相对来说有些繁琐,其实还可以以一种相对简单的方法读取位图数据,首先在程序的资源中定义DIB类型资源,然后添加位图到该类型中,将图像数据以资源的形式读取出来,这时候就可以根据所获取的数据中的位图信息构造来获取、显示图像数据了。下面的函数实现了,该函数的实现代码如下所示:2、 灰度位图数据的存储 为了将图像处理后所得到的像素值保存起来,我们重载了文档类的OnSavDocument(函数,这样用户在点击veSavs单后程序用该函数,实现图像数据的存储。该函数的实现如下:、的操作 通过上面的操作,我们可以获取图像中的数据了,现在的一个是如在中显示出图像数据。灰度图像要确显示,实现。首先我们一下,该构造定义如下: 可以通过DC:ePaet(、CD::aielet)相的AP,indows定义的息WURYNEWPETTE、WM_PALETTECNGD图类中处理定义息M_DOREIE该息在定义如下:#defeWREIEPAL(WM_R101来实现的操作。需要处理的时将程序的WM_QUERYNEWLETTE、MPLETTCGED如一将时,将收到M_QUERYNEPALET息,通该将要收到点,它一时实现其的后将收到_PTTEANGD息通其它,时一该实现其户。上的息是的,所以我们在中这个息,然后通个,得程序时载的。我们定义的用户息WM_REIP用通它收到息,该其。下面我们出了个息的处理函数的实现代码: :读可以从后面的显示的实现出我们在显示时实现了。上的处理相对来说繁琐,可对来说理,所以这样作的处是在取灰度位图时可以文件中的信息,了文件读取度,在一个ǎ ×下Ч/p>三DIB设备CDC成员::Bb(C::SechBt)来实现可以通过PI函数SDBBisToDviceSretchBBit)来实现,函数中具所用到的个参数的意义可以参MSD。其中tretchBBits)和D:trchBl可以将图像进展放大缩小显示。从文档中位图文件时CDBViw类的OnInitiaUpdae函数将被用,可以在该尺寸设置,Onw:、小结在本期讲座里我们主要介绍何操作灰度,它有较强表性,同时为后续像处编程学习作必要准备工作,经过学习,对于何操作其它类型BMP像文件,可以到达举一反三作VC字像处编程讲座之四BMP像特效操作上期讲座我们主要讲述BMP像据像和调色板操作等内容,在上面像特效显有,可以在后工程化我们件件效在件一像像特效,indows幕保护程序就各各样像特效,到和一像处件方式供户使,可以方便在程序像特效,PhotoShopAuhowe节浮雕雕刻百页窗旋转、扫描、栅条、马赛克、和渐隐等效过期讲座学习,读朋友们可以自己动手制作有特效效件像我们讲过主要有BitBltetDIBitsToDevicehDIBits〔等需要注意是,在特效时,并不是适宜Blt()是设相关(D,SIBtsDeviceStretchIBits(设备无关(DIB)由于我们讲座里处是设备无关,以我们主要关心是后应,其SetDIBitsToDevice()使起较死,远不StretchDIBits(〕灵活,并且对大多特效无能为力,以为像特效效,需要使StretchDIBits (,什么原因,我想可能在时同何含义,可以参考微MSDN。像特殊效根本思路是要么是操作像像素,要么是对像块一,对像对于种要:1像像操作;3.显对应像块;4.在连续像块之间插入一固定延迟。其像块划决定像方像块顺序决定方向和据同效同和在后面的各特效介绍何块和决定次序为使像过程明表出,要在像到sleep()Settime),于Windows是于操作,时对于像说准,为准时,可以timeeTe(,要inmlibMmsystem,:vdDelayme(Oti){DORDeginmeEndme;BgimieGetm);/、单位;do{EndTteGTi(〕;/再次;}whle(Endime-BegnTi〕}、操作位图像素显示特效介绍直操作图像像素灰度值图像显示主介绍如何图像浮雕和雕刻效果经常看电视朋友知注意没电视显示特效果图像??和??特效图像浮雕效果和图像雕刻效果经特效图像视看上去仿佛是3技术也许就是什么种技术那么流行原因吧其完全可以单图像算法看似复杂高深显下面以标准La原效果图,同VC开发平台上源代码。1.浮雕图像浮雕图效果是指图像向凸背景所谓浮雕概念是指标绘图像上像素和左上像素值图像保持一亮呈色程差加128常量需读者注意是像素值候和左上像素被防止经像素应该从图像右下像素开场,下面是源代码:d ibew:F(〕 /
DLEtandl存据句柄;ﻫLAPFOHDERB;/信息构造;ﻫ Cbcctun/挡指针;Bb;/存据句柄;ﻫungnd chara指向原始据指针;ﻫunsigned c指向据指针;ﻫ=p_I;拷贝存已读取据句柄;lpiTMAPIFOHEARbalLoc(HGLOAL获取信息taigdhaFdDIBsindBts是义根据构造数、pDoc->SetModifiedFlag〔设置文档修改标志为真、为后续的修改存盘作准;Width*8)*lpBi->biHeight); //声明一缓冲区来暂存处后的图像数;unsignedHGLOBAdata1handle);//得到该缓冲区的指针;AfxGetApp(〕->BeginWaitCursor();inti,j,buf;fori=lpBi->biHeighti>=i)//从图像右下角开场对图像的各像素进展浮雕处;forj=lpBi->biWidth;j>=2j )ﻫ 浮雕处DatalpBi->biHeight-i)*WIDTHBYTES〔lpBi->biWidth*8〕+j)-lpBi->biHeight-i+1)*WIDTHBYTES(lpBi->biWidth*8)+j-1)+128;if(buf>255)buf=255;if〔buf<0)buf=0;*(data+(lpBi->biHeight-i)*WIDTHBYTES(lpBi->biWidth*8〕+j)=(BYTE〕buf;}for( j=0; jbiHeightji=0i+〔pData+i*WIDTHBYTES(lpBi->biWidth*8〕+j〕=*(data+i*WIDTHBYTES〔lpBi->biWidth*8〕+j); AfxGetApp〔)->〔=hdib//将处过的图像数写回pDoc中的图像缓冲区;GlobalUnlock((HGLOBALhdib);//a1handle);Invalidate(TRUE);//显示图像}方,里我也就可以图像,时候前景凹陷背景。同样需要读者注意了防止复使时要。实现代码如下:voidCDibView::OnDKImage(){ﻫ //TOAddyourcommandhandlercode hereﻫHANDLtahandle;//的的一、;LPBITMAPIFOHEADER lpBi;ﻫCDibDoc*pDoc=GetDocument〔);ﻫHDIBhdib;ﻫ unsigned char*pData;unsignedchar *data;hdib=pDoc->m_hDIB;//ﻫlpBi=ITAPINFOEADR〕Globalock((HLOBAL)hdibpData=(unsignedcharFindDIBBitsPTlpBi);pDocetModifiedFlagTREﻫdata1handle=GlobalAlloc(GMEM_SA,WIDTHES(lpi->biWidth*8)*lpi->biHeight〕;//;data=(unsignedr*)GlobalLock〔(HGLOBAL)data1handle);//得到新的缓冲去的指针;AfxGetApp()->BeginWaitCursor();ﻫint i,j,buf;ﻫ for( i=0;i<=lpBi->biHeight-2; i++〕//对图像的各个像素循环进展雕刻处理;ﻫ for(j=0;j<=lpBi->biWidthj
ﻫ
buf=*〔pData+(lpBi->biHeight-i)*WIDTHBYTES〔lpBi->biWidth*8)+j)-*〔pData+(lpBi->biHeight-i-1)*WIDTHBYTES〔lpBi->biWidth*8)+j+1)+128;雕刻处理;ﻫ if(buf>255) buf=255;ﻫ if(buf<0)buf=0;ﻫ 〔data+(lpBi->biHeight-i〕*WIDTHBYTES〔lpBi->biWidth*8〕+j)=(BYTE〕buf;}for(j=0; jbiHeight; j++)ﻫ for( i=0; ibiWidth;i++) /;*(pData+i*THBYESlpBi->biidth*j)=*(data+i*WBTElpBi>biWidth*8)+j;pDoc->m_hDIB =hdib//pDoc;GlobalUnlock〔(HGLOBAL)hdib);//解锁、释放缓冲区;alUnlock((HGLOBAL)data1handleGlobalree(GLBALHGLOBAL)data1handle;nvalidate〔TRUE);//3.图像的旋转,最,lefttop,bottom〕,图像(x,y〕中〔centerycenter针旋转agle度后,新的位置〔x1y1)的:xcenter= (width+1)/2+left;ycenter = (eight+〕/2+topﻫ 1 =-) coθy-te)en r;y1=〔ceer)in+- nter)c+ce ter;(x,y)(x1、分块显示和去除扫描显示和去除扫描显示最根本特效显示方法它表现为从屏幕上去除掉种大戏院种拉幕效果根据扫描方向每,行,移动显示,。iiew::OnImgeDowcan〔){ﻫCDibDoc*pDoc=GetDocument(〕;HDIBdi;CClientDC pD(this〕;hdib=pDoc->m_hDI//获取据句柄;BIMAPINFOHEADERlpDIHdr;/位信息头构造针BTE*lpDIBBits/向位针;HDC hDC=pC.GetSafedc()/上;lpDIBHdr=(BITMAINFOHEADR *)GlaLock(hib//得位头信息;lpDIBBits=(BYTE*〕lpDIBHdr+sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQAD)/获取向;SetStretchBltodehDCLORNCLO显示;for〔inti;ibiHeight;i{ /次显示0iIBitsoDevice(hD,0,0,lpDIBHr->biWdth,DIBHiHei,0,,ilpDItsTMPINFO〕lpDrIB_RGB_COLO);DelayTime〔50);//}Glreturn;2://由于篇幅限省略了面样ChrWhi//义刷子;Ch ldru=pDC>Sctjec)int ;lpDIBHdriHeighti){iD>cle(DIBr-iWihpIB>bHihDlime(50);} ﻫ,n,m、n具、,kk-、*mk*n-1将在面子我8。.intm=8;it =IHr->biHehm;/能够8;for〔int l=1<=m;l+t{1、*1n1;chIBs4*+r,,, BHd>Heh-4*l+1,lpDBHdr->bidh1,lDIBs,LPBITMAPINO)IBHdDIB_RG_COLORSSRCCOPY)//juanlixioguoDelayTime(50;}栅栅移动复杂组合,栅栅类它本思想小,奇数左/,偶数右/当然也规反/面代码栅子:t=;n=bei+i0;pIHj{//偶数;SDIs 〔hj,,jBHdh-,,is〔LPBITMFOpH,SRCCPY/juaxouo=j+;//奇数;StretchDIBits (hDC,j,lpDIBHdr->biHeight-i,m,i,j,0,m,i,lpDBBits,PITMAPINFOlpDBHdr,DIB_RGB_COLOS,SRCCOPY);//Delayime(20,,,,,完整的,分是生成随机数的过程出。可以用它,跟显示的图像方块的坐标方法。....................int m,n;intRectize=60;//方块的、为60个像素;if(pDIHdr->biWdth%RecSiz!〕/得到图像水平方块的个数m=lpDIBHdr->biWidth/RectSize+1;elsem= lpDIBHdr->biWidth/RectSize->biHeight%RectSie!=0)/得到图像垂直方块的个数n= pDIBHdr->bHeight/RectSize+;elsen=lpDIBHdrbiHeight/RectSiz*point=newOIT[n*m];/;POINTpoinr(int a=0;afor〔intb=bx=a*RectSizey=b*RectSiz(point+a*b+b)=poin/开场随机的显示各个小方块doublefMax=AND_MX/定义Rand(函数的最大值tk=m*n-1;k>=0;k〕c=(int)((double)〔m*n)*rand(〕/fMaxmx=pointc].xintmy=pint[c.y//显示对应的图像的小块SDmy,Reccr->bt-my,RtSizeectiz,lpIBBis,〔BIINDIHdr,DB_OR,SR].xnt[pt]=potk;DlayTime(5}...,就将目标区域由本色逐渐过度就比拟简单。下面我们采第二实现代码:. //缓冲区样大小内存;y=lloSHARh*lpr->tlpbEG(hy;//将缓冲区;f(t0;kBH-H;+{*bits+k=(BYTE)255;}/色tisD,0lHr->bi,pIHdr-bight,0,,lpBHdr->bidth,lpDIBHbiHeightlpbit,(LPBITMAPINFO)lpDIHrD_RGB_COLORSRP/;L nls;dﻫh*dbeh
na;fn=k判断否待已经于原对, 如么计;ifbk )否那么对继续减少 ;〔lkYT)1}/后bsSDshD0,lH-biH ItlpDei,〔INlDB_R,COP//于或等于原那么认。f=pipDg h)e=u;DTe〔本文上面的内容介绍了几种图像的特殊显示效果,代码在Windows2000和Visual C++6.0编程环境下编译通过,运行正常,处理到达了预期的效果。读者可以将上面介绍的显示图像的函数和处理思路结合起来,实现更多效果。编程实现灰度图像与彩色图像的相互转换hotoShop的图像处理功能很强,其中有一个功能是将灰度图像转换为彩色何自己解决这个问题,值得大家探讨,现将我解决这类问题的方法陈述如下:工程应用中经常要遇到需要彩色图像到灰度图像的换的问题,过,,着B),图像的一个像用一个字节示该点的灰度值,它的值在255之间,数值越大,该点越,既越,越小那么越。转换公式为Gray(i,j〕=0.11R(i,j)+.59*Gi,j)(i,),其中y)为转换后的图像在i,j〕点处的灰度值,我们可以观察该式,其中重最大,所以转换时可以直接使用G值作为转换后的灰度。至于灰度图像转换为彩色图像,技术上称为灰度图像的伪彩色处理,这是一种视觉效果明显而技术又不是很复杂的图像增强技术。灰度图像中,如果相邻像素,,彩-图,,产生相应的R、G、,,换公式很多,我用的是最常用的一种,换曲线图如下:,RGBRG、,L25GxyVC彩色处理后的结果图。我这个实现函数中是如何得到灰度位图的数据的就不多讲?一文,那里应该讲的很清楚了。需要读者注意的是彩色图像中个中的个字别代的,第一个字为B,第二个为G值、最后一个为R值,这个顺序不要搞错了。代码实现如下:CDibView::f图像转换实现函数// TDd yur omdhndler eheDLE da1haLPAPFOEADR l;ﻫ TMAPINO m_Diboc *pDoc=GetDocument(;HDIB unsignedchar unsigned char *datib=o>tH();/,eginWaitCurs();Bi=PMANFOHEADER)Globaok〔HGLOBAL)i);hData=unsinecha*)FindDits((PS)li);m_pMI=w BITMAPINO;/生成彩色ﻫm_BM->bmiarbiitCoun=24ﻫ m_pB-bmHead.biClrImporant=0;m_pMI>bmiHar.bClrUsed=0ﻫm_pBMI-bmHeader.biCompsion=BI_RGBﻫ_pBMI->bmiHeaderbiHeight=lpi>biHeight;m_pBMI->miader.biWidt=l->biWit;mBMI>bmiHeader.iPlas=1;mBMI>bmiaebiSz=sizeofITMPIFOHEADER)ﻫm_pBMI->bmiader.biXPelsPMete=0;m_pBMI->miHeader.biYlsrMete=0ﻫ Szmge=WTHYESlpi>biWth*8)*lp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国四路硬盘录像机数据监测研究报告
- 2025至2030年中国凉屋顶节能隔热防晒涂料数据监测研究报告
- 2025至2030年中国三腔双囊胃管数据监测研究报告
- 遗产继承协议咨询合同
- 2025年法律知识竞赛抢答题库及答案(共50题)
- 健康健身挑战赛参赛协议
- 医疗行业模拟试题
- 事业单位岗位聘用协议
- 健康保险代理销售合作协议
- 关于产品研发方向决策会议的纪要
- 全国优质课一等奖职业学校《绘制切割类组合体的三视图》课件
- 【自考复习资料】03011儿科护理学(二)复习重点
- 跳绳之双脚跳教案
- 大象版小学科学四年级下册5.1小船与浮力 教学课件
- 物资管理工作流程图
- 中国马克思主义与当代思考题(附答案)
- 中西式点心新手制作教程
- 读书分享交流会《从一到无穷大》课件
- 高大模板支撑体系安全检查验收表
- 苏教版六年级下册综合实践活动计划及全册教案
- 村集体经济组织会计制度讲解
评论
0/150
提交评论