图像的存取、显示与生成

上传人:宝路 文档编号:52453061 上传时间:2018-08-21 格式:PPT 页数:32 大小:569.65KB
返回 下载 相关 举报
图像的存取、显示与生成_第1页
第1页 / 共32页
图像的存取、显示与生成_第2页
第2页 / 共32页
图像的存取、显示与生成_第3页
第3页 / 共32页
图像的存取、显示与生成_第4页
第4页 / 共32页
图像的存取、显示与生成_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《图像的存取、显示与生成》由会员分享,可在线阅读,更多相关《图像的存取、显示与生成(32页珍藏版)》请在金锄头文库上搜索。

1、图像的存取、显示与生成 14.1.3 CImage类(1)lCImage是Visual C+中MFC的一个类CImage类使图形、图像软件的开发跨越了DDB与DIB概念 ,使处理更为简洁、方便 CImage类提供了读入和保存BMP、JPEG、GIF、TIF与 PNG等格式图像的能力CImage可以直接使用Windows提供的图形功能 24.1.3 CImage类(2)l使用CImage时,必须包含atlimage.h文件。可在stdafx.h文件 的末尾添加#include .3CImage类成员函数创建与删除lCreate创建一个DIB位图与已有CImage对象相连接lDestroy位图与C

2、Image对象相分离并予删除4CImage类成员函数输入与输出lLoad读入指定图像文件中的图像lSave按指定类型保存图像,文件名中不能省略后缀5CImage类成员函数位图参数 lGetWidth返回当前图像的宽度(以像素为单位)lGetHeight返回当前图像的高度lGetBPP返回当前图像的每像素位数(颜色的深度)lGetPixelAddress返回指定像素数据存放位置的存储地址lGetMaxColorTableEntries返回调色板单元数lIsIndexed判别位图中是否有调色板6CImage类成员函数图形绘制lGetDC返回当前位图的设备描述表lReleaseDC释放设备描述表lG

3、etPixel返回指定位置像素的颜色lSetPixel设置指定位置像素的颜色lSetPixelRGB设置指定位置像素的红绿蓝分量lGetColorTable获取调色板颜色分量 (红、绿、蓝) 值lSetColorTable设置调色板颜色分量 (红、绿、蓝) 值 7CImage类成员函数位图块传送lBitBlt位图的一个矩形区域复制到另一位图上的指定区域lStretchBlt从源矩形拷贝到目标矩形,支持伸缩84.1.5 图像文件的输入与输出lCImage类读入图象数据的成员函数:HRESULT Load( LPCTSTR pszFileName ) throw( ); 例如:WorkCanvus

4、.Load(m_FileName);lCImage类保存图象数据的成员函数:HRESULT Save( IStream* pStream, REFGUID guidFileType ) const throw(); 9读入图象文件并显示图象的步骤l(1)建立CImage对象,例如WorkCanvusl(2)在“打开文件”菜单处理程序OnFileOpen()函数中用 WorkCanvus的Load()成员函数将图像文件里的图象数据读入 到WorkCanvus中l(3)在菜单“显示工作画布”处理程序OnDisplayWorkcanvus()中 用WorkCanvus的Bitblt()函数将Work

5、Canvus中的图象数据传 送到画布(例如CClientDC或pDC)上WorkCanvus图像文件Load()Bitblt()画布10打开图图像文件-OnFileOpen()l菜单: “文件/打开” l源文件:CImageDoc.cppl函数:OnFileOpen()l步骤: (1)添加CImage类的全局对象WorkCanvus,并在stdafx.h中将WorkCanvus 说明为外部对象 extern CImage WorkCanvus; (2)添加CImageDoc类的事件ID_FILE_OPEN的处理函数void CImageDoc:OnFileOpen() (3)在CImageDo

6、c:OnFileOpen()函数中编写程序由对话框输入图像文件名根据文件名从图像文件中读入图像数据到CImage类的对象 WorkCanvus中并设置最近打开的文件名11Program CImageDoc.cpp OnFileOpen()void CImageDoc:OnFileOpen() 。 CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST, strFilter); hResult = (int)dlg.DoModal();/由对话框输入图像文件名 m_FileName = dlg.GetFileName();/保存当前文件名 hRes

7、ult = WorkCanvus.Load(m_FileName);/根据文件名从图像文件中读 入图像数据到CImage类的对象WorkCanvus中 SetPathName(m_FileName,1);/设置最近打开的文件名 UpdateAllViews(NULL);/调用OnDraw显示图象 12保存图图像文件(1)l菜单: “文件/另存为” l源文件:CImageDoc.cppl函数:OnFileSaveAs()l步骤: (1)添加CImageDoc类的事件ID_FILE_SAVE_AS的处理函数 void CImageDoc:OnFileSaveAs() (3)在CImageDoc:

8、OnFileSaveAs()函数中编写程序:由对话框输入图像文件名根据文件名将CImage类的对象WorkCanvus中的图像数据 保存到图像文件中去13保存图图像文件(2)void CImageDoc:OnFileSaveAs() CFileDialog dlg(FALSE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_EXPLORER,strFilter); hResult = (int)dlg.DoModal();/ 由对话框输入文件名 hResult = WorkCanvus.Save(strFileName); 14显示

9、CImage类对象中的图象l菜单: “画布操作/显示工作画布” l源文件:CImageView.cppl函数:OnDisplayWorkcanvus() void DrawWorkCanvus(CDC *pDC) CClientDCdc(this); intnXDest,nYDest,nWidth,nHeight,nXSrc,nYSrc; nXSrc=0; nYSrc=0; nXDest=0; nYDest=0; nWidth=WorkCanvus.GetWidth(); nHeight=WorkCanvus.GetHeight(); WorkCanvus.BitBlt(dc,nXDest,n

10、YDest,nWidth,nHeight,nXSrc,nYSrc,SRCCOPY); 154.2 画布l画布是一个将图像作为二维像素数组存储的数据结构 屏幕画布n屏幕上Windows窗口中的客户区n可通过新建CClientDC的对象来创建屏幕画布n利用OnDraw()函数中的参数pDC来创建屏幕画布 内存画布n建立一个或多个CImage对象来创建内存画布l画布可用作双缓存技术克服屏幕画面的闪烁164.2.1-2 CImage对象的创建BOOL Create(int nWidth, int nHeight,int nBPP,DWORD dwFlags=0)throw();lnWidth The

11、width of the CImage bitmap, in pixels. lnHeight The height of the CImage bitmap, in pixels. If nHeight is positive, the bitmap is a bottom-up DIB and its origin is the lower left corner. If nHeight is negative, the bitmap is a top-down DIB and its origin is the upper left corner. lnBPP The numbers o

12、f bits per pixel in the bitmap. Usually 4, 8, 16, 24, or 32. Can be 1 for monochrome bitmaps or masks. ldwFlags Specifies if the bitmap object has an alpha channel. Can be a combination of zero or more of the following values:174.2.1-3 CImage对象转换成CDC对象 lCDC中有大量绘图函数,那么如何用CDC类的成员函数在 CImage对象上绘图?l从CIma

13、ge对象取得HDC设备描述表,再转换成CDC对象,l例如 CImage WorkCanvus; CDC *pDC;pDC=CDC:FromHandle(WorkCanvus.GetDC();/获取CDC指针pDC-SetPixel(x,y,(COLORREF) n); /CDC上的各种绘图操作WorkCanvus.ReleaseDC(); / 释放HDC184.2.2 窗口刷新 lWindows通过调用OnDraw()函数刷新窗口 l何时需要刷新窗口?系统需要,例如系统改变窗口的尺寸程序需要,例如程序要重画,可调用Invalidate()使窗口失效 Invalidate()可以使整个窗口失效进

14、行重绘,也可定义一个 矩形区域只使一个区域内部某些地方失效l刷新时全部清除失效区域后,再重新开始绘制新的画面,故在 执行过程中会看到屏幕有一次闪动 l刷新窗口的方法重新绘制,即将形成当前图像画面的过程再重复一遍备份复贴,即将当前的屏幕画面存储起来作为备份,刷新时 将备份粘贴到屏幕上194.2.3 演示程序中一些画布的设置l工作画布-用于存放需要进行处理的图像CImage对象,名为WorkCanvusl副本画布-保存图像,必要时把副本画布恢复到工作画布中去CImage对象,名为SaveCanvus l屏幕画布-即屏幕窗口 CClientDC的对象,例如dc CDC类的指针,例如pDCWorkCa

15、nvusSaveCanvus屏幕画 布204.3.1-4 位图的复制 lCImage类对象之间的复制功能不可以用赋值来实现。因此,编 写了CopyImage()函数来实现两个CImage对象间数据的复制l菜单: “画布操作/工作画布复制到副本画布” l源文件:第四章图象显示.cppl函数:CopyImage()21void CopyImage(CImage *pNewImg,CImage *pImage) RGBQUADColorTabs256; BYTE*pPixels, *pNewPixels;CDC*pDC,*pNewDC; nWidth=pImage-GetWidth();nHeigh

16、t=pImage-GetHeight(); nBitsPerPixel=pImage-GetBPP(); nColorTableEntries=pImage-GetMaxColorTableEntries(); if(!pNewImage-IsNull() pNewImage-Destroy(); pNewImage-Create(nWidth,nHeight,nBitsPerPixel,0); if (nColorTableEntries0) pImage-GetColorTable(0,nColorTableEntries,ColorTabs); pNewImage-SetColorTable(0,nColorTableEntries,ColorTabs); p

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号