




已阅读5页,还剩52页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一:Vc+打开bmp格式的图像,1.打开MicrosoftVisualc+6.02.按“文件”的“新建”按钮,在菜单栏上的“工程”按钮上选择MFCAppWizad(exe),自己新建一个工程名称,1.在菜单栏上的“查看”上点“建立类向导”,用类向导ClassWizard在Pp.cpp中添加消息事件ID_FILE_OPEN,在/TODO:Addyourcommandhandlercodehere后加上CFileDialogFileDlg(TRUE,*.bmp,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T(Bitmap(*.BMP)|*.BMP|);if(FileDlg.DoModal()=IDOK)CStringcstrFileName=FileDlg.GetPathName();OpenDocumentFile(cstrFileName);,2.在菜单栏上的“查看”上点“建立类向导”,用类向导ClassWizard在Pp.cpp中添加消息响应事件OpenDocumentFile,用类向导ClassWizard在PpDoc.cpp中添加消息响应事件OnOpenDocument,并添加图像处理函数ReadImage,在/TODO:Addyourspecializedcreationcodehere后加上ReadImage(lpszPathName);再在后面加上:BOOLCPpDoc:ReadImage(constchar*szFileName)CFilefile;CFileExceptionfe;intnReadFromFile;longlImageSize;if(!file.Open(szFileName,CFile:modeRead|CFile:shareDenyWrite,调试之后出现了没有定义的错误,所以要在他的头文件PpDoc.h中对函数和变量的申明,用类向导ClassWizard在PpView.cpp中添加绘图消息响应函数OnDraw,用于处理8位和24位数字图像a.在PpView.cpp中添加8位(DisplayBmp8)和24位(DisplayBmp24)数字图像处理函数,voidCPpView:OnDraw(CDC*pDC)CPpDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:adddrawcodefornativedatahereif(pDoc-bImageLoaded)if(pDoc-BitCount=8)/8bitDisplayBmp8(pDoc,pDC);else/24bitDisplayBmp24(pDoc,pDC);,voidCPpView:DisplayBmp8(CPpDoc*pDoc,CDC*pDC)CRectrect;CSizesizeTotal;intnColorIndex,i,j,Width;BYTEbtBlue,btGreen,btRed;COLORREFcolor;rect.top=0;rect.left=0;rect.right=pDoc-BmpWidth-1;rect.bottom=pDoc-BmpHeight-1;if(pDoc-BmpWidth%4!=0)Width=(pDoc-BmpWidth/4)+1)*4;elseWidth=pDoc-BmpWidth;for(j=0;jBmpHeight;j+)for(i=0;iBmpWidth;i+)nColorIndex=pDoc-pImagej*Width+i;btBlue=pDoc-pBitMapInfo-bmiColorsnColorIndex.rgbBlue;btGreen=pDoc-pBitMapInfo-bmiColorsnColorIndex.rgbGreen;btRed=pDoc-pBitMapInfo-bmiColorsnColorIndex.rgbRed;color=RGB(btBlue,btGreen,btRed);pDC-SetPixel(i,rect.bottom-j,color);,voidCPpView:DisplayBmp24(CPpDoc*pDoc,CDC*pDC)CRectrect;CSizesizeTotal;inti,j,Width;BYTEbtBlue,btGreen,btRed;COLORREFcolor;rect.top=0;rect.left=0;rect.right=pDoc-BmpWidth-1;rect.bottom=pDoc-BmpHeight-1;if(pDoc-BmpWidth%4!=0)Width=(pDoc-BmpWidth*3/4)+1)*4;elseWidth=pDoc-BmpWidth*3;for(j=0;jBmpHeight;j+)for(i=0;iBmpWidth;i+)btBlue=pDoc-pImagej*Width+i*3;btGreen=pDoc-pImagej*Width+i*3+1;btRed=pDoc-pImagej*Width+i*3+2;color=RGB(btRed,btGreen,btBlue);pDC-SetPixel(i,rect.bottom-j,color);,b调试后出现未定义的错误,DisplayBmp8和DisplayBmp24需在头文件ProjectView.cpp中进行声明,在PpDoc.cpp的构造函数中申请绘图窗口所需的内存空间,在PpDoc.cpp的析造函数中释放申请绘图窗口所需的内存空间,if(bImageLoaded=TRUE)GlobalFree(pImage);LocalFree(pBitMapInfo);,窗口的最大化显示,只要在Pp.cpp中修改ShowWindow的参数,pMainFrameShowWindow(SW_MAXIMIZE);,不打开一个空的窗口,只要调用CCommandLineInfo类的成员函数m_nShellCommand,cmdInfo.m_nShellCommand=CCommandLineInfo:FileNothing;,可以在PpView.cpp的OnInitialUpdate函数中调整窗口大小为图像本身大小,CPpDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);sizeTotal.cy=pDoc-BmpHeight;sizeTotal.cx=pDoc-BmpWidth;SetScrollSizes(MM_TEXT,sizeTotal);ResizeParentToFit(TRUE);,在ChildFrm.cpp的PreCreateWindow函数中可初始化子窗口大小,BOOLCChildFrame:PreCreateWindow(CREATESTRUCT,最终调试后:,二:图像基本信息的获取,LongToString函数的定义,CStringCBaseInfoDlg:LongToString(longdata)CStringstr;intdec,sign;str=_ecvt(data,10,在新建类CBaseInfoDlg添加SetInfo函数,voidCBaseInfoDlg:SetInfo(CMyTestDoc*pDoc)CStringcsTemp;if(pDoc-BitMapFileHeader.bfType=0 x4D42)m_Style=BMP;csTemp=LongToString(pDoc-BitMapFileHeader.bfSize);m_FileSize=csTemp+B;csTemp=LongToString(pDoc-BitMapFileHeader.bfOffBits);m_DataOff=csTemp+-十进制;csTemp=LongToString(pDoc-pBitMapInfo-bmiHeader.biWidth);m_Width=csTemp+像素;csTemp=LongToString(pDoc-pBitMapInfo-bmiHeader.biHeight);m_Height=csTemp+像素;csTemp=LongToString(pDoc-pBitMapInfo-bmiHeader.biBitCount);m_PixelDep=csTemp+bit;,LongToString和SetInfo需在BMPDLG.h中进行定义,public:CBMPDLG(CWnd*pParent=NULL);/standardconstructorCStringLongToString(longdata);voidSetInfo(CPpDoc*pDoc);,在BMPDLG.h中加PpDoc的头文件#include“PpDoc.h”因为有这个申明voidSetInfo(CPpDoc*pDoc);,在PpView.cpp中进行对BMPDLG头文件的定义,添加#includeBMPDLG.h,在PpView.cpp中的voidCPpView:OnBaseinfoInfo()CPpDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);CBMPDLGdlg;/声明类对象dlgdlg.SetInfo(pDoc);/调用CBMPDLG类中的SetInfo函数dlg.DoModal();/显示图像信息对话框,三.直方图,在新建的Dialog中建立类向导HistDlg,在HistDlg.cpp中建立类向导,在OnPaint()函数中写程序,inti,j;if(BitCount=8)long
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论