VC++位图打开和显示.doc_第1页
VC++位图打开和显示.doc_第2页
VC++位图打开和显示.doc_第3页
VC++位图打开和显示.doc_第4页
VC++位图打开和显示.doc_第5页
全文预览已结束

下载本文档

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

文档简介

用VC+位图打开和显示 步骤:1、首先建立一个工程。打开VC+6.0,单击 文件【files】新建【new】工程【projects】在打开的projects 下选择MFC App Wizard exe在project name 下输入自己的工程名例如(Showpicture)单击【ok】在打开的对话框中选择基于单文档【single document】在第四步 “MFC App Wizard step 4 of 6”面板中删掉【隐藏工具栏】和【打印和打印预览】两个选项,之后的全部选择默认,单击finish,出现一个“New Project Information”窗口,单击【ok】。一个简单的工程框架就建好了。这是基于MFC App Wizard 自动生成的应用程序,如果我们自己还没有编译任何代码,现在就按下F7键编译程序,接着按Ctr+F5键运行程序,可以看到出现一个完整的带有标题栏、菜单栏的可调边框的应用程序。2、现在我们正式开始在新建工程Showpicture中进行编程实现bmp位图的打开和显示。点击左边框中的【ResourceView】框找到【Menu】点开,双击Menu下的图标,在右面的显示框中创建两个菜单:打开,显示原图。分别双击这两个菜单修改属性: 打开 ID: ID_FILE_OPEN 显示原图 ID: IDM_YUANTU3、给这两个菜单建立类向导。在右边的窗口中右击“打开”,选择“建立类向导”,然后在打开的对话框中按下图1操作,“Class name”选择 “CShowpictureDoc” ”Object IDs”中选择“ID_FILE_OPEN” “Message”中选择“COMMAND”,点击“Add Function”键就会在“Member functions”中如下显示:然后点击“Edit Code”,在自动生成的OnFileOpen函数中编写代码:void CShowpictureDoc:OnFileOpen() / TODO: Add your command handler code hereCFileDialog fileDlg(TRUE);fileDlg.m_ofn.lpstrTitle=图片打开对话框;fileDlg.m_ofn.lpstrFilter=BMP Files(*.bmp)0*.bmp00;if(IDOK=fileDlg.DoModal ()filename.Format (%s,fileDlg.GetPathName();CDib.LoadFile(filename); 同理,操作“显示原图”,如下图2显示:注意这次的“Class name”选择“CShowpictureView”。点击“Edit Code”,在自动生成的“OnYuantu”函数中编写代码:void CShowpictureView:OnYuantu() / TODO: Add your command handler code hereCShowpictureDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);filename=pDoc-filename;state1=1;Invalidate();4、创建一个处理位图的类CDib,且,CDib类是由CObject类派生出来的。点击工程菜单栏中的插入【insert】【insert class】类类型选“Generic Class”, 类名称填“CDib” 【ok】。可以看见工程窗口的Class View 中多了一个 CDib 类;点开CDib类的头文件,输入以下代码,注意变量可以直接复制,声明的函数最好不要直接复制(在CDib类右击选择“Add member function”,输入函数类型和函数名)。#include windowsx.hclass CDib :public CObject public:RGBQUAD* m_pRGB;BYTE* m_pData;UINT m_numberOfColors; BOOL m_valid;BITMAPFILEHEADER bitmapFileHeader;BITMAPINFOHEADER* m_pBitmapInfoHeader;BITMAPINFO* m_pBitmapInfo;BYTE* pDib; DWORD size; char m_fileName256;public:void LoadFile(const char* dibFileName);DWORD GetSize();UINT GetWidth();UINT GetHeight();UINT GetNumberOfColors(); CDib();virtual CDib();5、对CDib类中的函数定义,找到Dib.cpp 输入代码:CDib:CDib() size=0;CDib:CDib()GlobalFreePtr(m_pBitmapInfo);UINT CDib:GetNumberOfColors()int numberOfColors;if(m_pBitmapInfoHeader-biClrUsed=0)& (m_pBitmapInfoHeader-biBitCount biBitCount)case 1: numberOfColors = 2; break;case 4: numberOfColors = 16; break;case 8: numberOfColors = 256;elsenumberOfColors = (int) m_pBitmapInfoHeader-biClrUsed;return numberOfColors;UINT CDib:GetHeight() return (UINT) m_pBitmapInfoHeader-biHeight;UINT CDib:GetWidth() return (UINT) m_pBitmapInfoHeader-biWidth;DWORD CDib:GetSize()if (m_pBitmapInfoHeader-biSizeImage != 0)return m_pBitmapInfoHeader-biSizeImage;elseDWORD height = (DWORD) GetHeight();DWORD width = (DWORD) GetWidth();return height * width;void CDib:LoadFile(const char *dibFileName)strcpy(m_fileName,dibFileName);CFile dibFile(m_fileName, CFile:modeRead);dibFile.Read(void*)&bitmapFileHeader,sizeof(BITMAPFILEHEADER);if (bitmapFileHeader.bfType = 0x4d42)DWORD fileLength = dibFile.GetLength();size = fileLength -sizeof(BITMAPFILEHEADER);pDib =(BYTE*)GlobalAllocPtr(GMEM_MOVEABLE, size); dibFile.Read(void*)pDib, size);dibFile.Close();m_pBitmapInfo = (BITMAPINFO*) pDib;m_pBitmapInfoHeader = (BITMAPINFOHEADER*) pDib;m_pRGB = (RGBQUAD*)(pDib +m_pBitmapInfoHeader-biSize);int m_numberOfColors = GetNumberOfColors();if (m_pBitmapInfoHeader-biClrUsed = 0)m_pBitmapInfoHeader-biClrUsed = m_numberOfColors;DWORD colorTableSize = m_numberOfColors * sizeof(RGBQUAD);m_pData = pDib + m_pBitmapInfoHeader-biSize+ colorTableSize;if (m_pRGB = (RGBQUAD*)m_pData) m_pRGB = NULL;m_pBitmapInfoHeader-biSizeImage = GetSize();m_valid = TRUE;elsem_valid = FALSE;AfxMessageBox(This isnt a bitmap file!);6、找到类CShowpictureView 中的OnDraw(CDC* pDC)函数输入以下代码:void CShowpictureView:OnDraw(CDC* pDC)CShowpictureDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereif(state1=1)CBitmap m_bitmap;HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,_T(filename),IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);m_bitmap.Attach (hBitmap);CDC dcImage;if(!dcImage.CreateCompatibleDC (pDC)return;BITMAP bm;m_bitmap.GetBitmap (&bm);dcImage.SelectObject (&m_bitmap);pDC-BitBlt (0,0,bm.bmWidth ,bm.bmHeight ,&dcImage,0,0,SRCCOPY);7、最后编译时。在类CShowpictureDoc上右击,选择“Add member variable”

温馨提示

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

评论

0/150

提交评论