数字图像处理实验报告全C_第1页
数字图像处理实验报告全C_第2页
数字图像处理实验报告全C_第3页
数字图像处理实验报告全C_第4页
数字图像处理实验报告全C_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

1、数字图像处理实验报告昆明理工大学理学院电子信息科学与技术班 级: 电信112 姓 名: 张鉴 学 号: 201111102210 指导教师: 桂进斌 完成日期: 昆明理工大学理学院电子信息科学与技术112班目录实验一 VC 6.0下BMP位图的读取与显示3实验二 图像基本运算点运算13实验三 图像基本运算代数、逻辑运算21实验四 图像基本运算几何运算29实验五 直方图的绘制及其均衡36实验六 图像的平滑与锐化42实验七 伪彩色及彩色图像处理50实验八 图像傅里叶变换及低通滤波和高通滤波55实验一 VC 6.0下bmp位图的读取与显示一、 实验目的1. 掌握windows BMP格式位图文件的基

2、本格式;2. 会使用VC+读取图像数据并显示。二、 实验原理1. 设备无关位图(DIB)设备无关位图(DIB)是一种与设备无关的位图,自带颜色信息,因此有利于在各种设备间传输。2. BMP中DIB的结构文件头:BITMAPFILEHEADERtypedef struct tagBITMAPFILEHEADER / bmfh WORD bfType ; / signature word "BM" or 0x4D42 DWORD bfSize ; / entire size of file WORD bfReserved1 ; / must be zero WORD bfRes

3、erved2 ; / must be zero DWORD bfOffsetBits ; / offset in file of DIB pixel bits BITMAPFILEHEADER, * PBITMAPFILEHEADER ;位图信息头:BITMAPINFOHEADERtypedef struct tagBITMAPINFOHEADER / bmih DWORD biSize ; / size of the structure = 40 LONG biWidth ; / width of the image in pixels LONG biHeight ; / height of

4、 the image in pixels WORD biPlanes ; / = 1 WORD biBitCount ; / bits per pixel (1, 4, 8, 16, 24, or 32) DWORD biCompression ; / compression code DWORD biSizeImage ; / number of bytes in image LONG biXPelsPerMeter ; / horizontal resolution LONG biYPelsPerMeter ; / vertical resolution DWORD biClrUsed ;

5、 / number of colors used DWORD biClrImportant ; / number of important colors BITMAPINFOHEADER, * PBITMAPINFOHEADER ;调色板(可能没有):typedef struct tagRGBQUAD / rgb BYTE rgbBlue ; / blue level BYTE rgbGreen ; / green level BYTE rgbRed ; / red level BYTE rgbReserved ; / = 0 RGBQUAD ;实际位图数据:typedef struct ta

6、gBITMAPINFO / bmi BITMAPINFOHEADER bmiHeader ; / info-header structure RGBQUAD bmiColors1 ; / color table array BITMAPINFO, * PBITMAPINFO ; 3. DIB访问函数:SetDIBitsToDevice:SetDIBitsToDevice函数显示没有延伸和缩小的DIB。DIB的每个图素对应到输出设备的一个图素上,而且DIB中的图像一定会被正确显示出来也就是说,图像的顶列在上方。任何会影响设备内容的座标转换都影响了显示DIB的开始位置,但不影响显示出来的图片大小和

7、方向。该函数如下:iLines = SetDIBitsToDevice ( hdc, / device context handlexDst, / x destination coordinate yDst, / y destination coordinate cxSrc, / source rectangle widthcySrc, / source rectangle height xSrc, / x source coordinate ySrc, / y source coordinate yScan, / first scan line to draw cyScans, / numb

8、er of scan lines to draw pBits, / pointer to DIB pixel bitspInfo, / pointer to DIB information fClrUse) ; / color use flagSetDIBitsToDevice函数传回所显示的扫描行的数目。因此,要调用SetDIBitsToDevice来显示整个DIB图像,您需要下列信息:hdc 目的表面的设备句柄代号xDst和yDst 图像左上角的目的坐标cxDib和cyDib DIB的图素宽度和高度,在这里,cyDib是BITMAPINFOHEADER结构内b

9、iHeight栏位的绝对值。pInfo和pBits 指向点阵图信息部分和图素位元的指标StretchDIBits:int StrechDIBits(HDC hdc,int Xdest,int Ydest,int DEstWidth,int nDestHeight,int XSrc, int Ysrc,int nSrcWidth,int SrcHeight,CONST VOID *lpBits,CONST BITMAPINFO *lpBitsInfo,UINT iUsage,DORD dwRo);要通过缩小或放大DIB,在输出设备上以特定的大小显示它,可以使用StretchDIBits

10、:iLines = StretchDIBits ( hdc, / device context handle xDst, / x destination coordinate yDst, / y destination coordinatecxDst, / destination rectangle width cyDst, / destination rectangle height xSrc, / x source coordinate ySrc, / y source coordinatecxSrc, / source rectangle width cySrc, / source re

11、ctangle height pBits, / pointer to DIB pixel bits pInfo, / pointer to DIB information fClrUse, / color use flagdwRop) ; / raster operation函数参数除了下列三个方面,均与SetDIBitsToDevice相同。三、 实验内容使用VC+读取图像数据并显示。四、 实验步骤1. 启动VC+6.0,新建一个基于MFC的应用程序项目,命名:zhangjian;2. 进根据提示,定制应用程序的特征。得到如下图所示内容;3. 修改视图类的基类心支持滚动条;4. 单击完成按钮

12、生成应用程序框架;5. 如下图通过类向导或手动在视图类中添加成员变量m_x,类型int;6. 按同样的方法添加以下成员变量;HBITMAP m_Bmp;LPVOID m_ColorList;LPBYTE m_Image;LPBITMAPINFOHEADER m_DibHead; enum allocate None, crtallocate, heapallocate;allocate m_nBmpallocate;allocate m_nImageallocate;DWORD m_ImageSize; int m_nPalette;HANDLE m_hFile;HANDLE m_hMap;L

13、PVOID m_lpvFile;HPALETTE m_hPalette;HGLOBAL m_hGlob; 7. 如下图通过类向导的功能增加成员函数SetPaletteSize(int nBitCount),类型void; 8. 按同样的方法添加以下成员函数;void Clear();清除BOOL ReadFile(CFile *pFile);读取数据到内存BOOL SetPalette();当前位图颜色数大于设置调色板BOOL GetPalette();创建颜色数不大于的调色板BOOL DibToDC(CDC* pDC,CSize size);显示位图BOOL MemToDib(LPVOID

14、lmem);得到内存中位图象素位置CSize GetDibSize();返回位图尺寸9. 完善成员函数代码功能,从老师给的代码中拷贝内容,结果如下;void CZhangjianView:SetPaletteSize(int nBitCount) /设置调色板大小if(m_DibHead->biSize != sizeof(BITMAPINFOHEADER) throw new CException;/抛出异常m_ImageSize = m_DibHead->biSizeImage;if(m_ImageSize = 0) DWORD dwBytes = (DWORD) m_DibH

15、ead->biWidth * m_DibHead->biBitCount) / 32;if(DWORD) m_DibHead->biWidth * m_DibHead->biBitCount) % 32)dwBytes+;dwBytes *= 4;m_ImageSize = dwBytes * m_DibHead->biHeight; m_ColorList = (LPBYTE) m_DibHead + sizeof(BITMAPINFOHEADER);if(m_DibHead = NULL) | (m_DibHead->biClrUsed = 0) swi

16、tch(nBitCount) case 1:m_nPalette = 2;break;case 4:m_nPalette = 16;break;case 8:m_nPalette = 256;break;case 16:case 24:case 32:m_nPalette = 0;break;default:ASSERT(FALSE);else m_nPalette = m_DibHead->biClrUsed;ASSERT(m_nPalette >= 0) && (m_nPalette <= 256);void CZhangjianView:Clear()

17、/清除if(m_hFile = NULL) return;:UnmapViewOfFile(m_lpvFile);:CloseHandle(m_hMap);:CloseHandle(m_hFile);m_hFile = NULL;if(m_nBmpallocate = crtallocate) delete m_DibHead;else if(m_nBmpallocate = heapallocate) :GlobalUnlock(m_hGlob);:GlobalFree(m_hGlob);if(m_nImageallocate = crtallocate) delete m_Image;if

18、(m_hPalette != NULL) :DeleteObject(m_hPalette);if(m_Bmp != NULL) :DeleteObject(m_Bmp);m_nBmpallocate = m_nImageallocate = None;m_hGlob = NULL;m_DibHead = NULL;m_Image = NULL;m_ColorList = NULL;m_nPalette = 0;m_ImageSize = 0;m_lpvFile = NULL;m_hMap = NULL;m_hFile = NULL;m_Bmp = NULL;m_hPalette = NULL

19、;BOOL CZhangjianView:ReadFile(CFile *pFile) /读取数据到内存int nCount, nSize;BITMAPFILEHEADER bmfh;Clear();try nCount = pFile->Read(LPVOID) &bmfh, sizeof(BITMAPFILEHEADER);if(nCount != sizeof(BITMAPFILEHEADER) throw new CException;if(bmfh.bfType != 0x4d42) throw new CException;nSize = bmfh.bfOffBits

20、 - sizeof(BITMAPFILEHEADER);m_DibHead = (LPBITMAPINFOHEADER) new charnSize;m_nBmpallocate = m_nImageallocate = crtallocate;nCount = pFile->Read(m_DibHead, nSize); SetPaletteSize(m_DibHead->biBitCount);GetPalette();m_Image = (LPBYTE) new charm_ImageSize;nCount = pFile->Read(m_Image, m_ImageS

21、ize); catch(CException* tmpc) AfxMessageBox("文件读取错误");tmpc->Delete();return FALSE;return TRUE;BOOL CZhangjianView:SetPalette() /当前位图颜色书大于256设置调色板if(m_nPalette!=0)return FALSE;CClientDC dc(this);CDC *pDC=&dc;m_hPalette=:CreateHalftonePalette(pDC->GetSafeHdc();return TRUE;BOOL CZha

22、ngjianView:GetPalette() /创建颜色数不大于256的调色板if(m_nPalette=0)return FALSE;if(m_hPalette!=NULL):DeleteObject(m_hPalette);LPLOGPALETTE pTempPalette=(LPLOGPALETTE) new char2*sizeof(WORD)+ m_nPalette*sizeof(PALETTEENTRY); pTempPalette->palVersion=0x30;pTempPalette->palNumEntries=m_nPalette;LPRGBQUAD pR

23、GBQuad=(LPRGBQUAD)m_ColorList;for(int i=0;i<m_nPalette;i+)pTempPalette->palPalEntryi.peRed=pRGBQuad->rgbRed;pTempPalette->palPalEntryi.peGreen=pRGBQuad->rgbGreen;pTempPalette->palPalEntryi.peBlue=pRGBQuad->rgbBlue;pTempPalette->palPalEntryi.peFlags=0;pRGBQuad+;m_hPalette=:Cre

24、atePalette(pTempPalette);delete pTempPalette;return TRUE;BOOL CZhangjianView:DibToDC(CDC *pDC, CSize size) /显示位图if(m_DibHead=NULL) return FALSE;if(m_hPalette!=NULL)HDC hdc=pDC->GetSafeHdc();:SelectPalette(hdc,m_hPalette,TRUE);pDC->SetStretchBltMode(COLORONCOLOR);:StretchDIBits(pDC->GetSafeH

25、dc(),0,0,size.cx,size.cy, 0,0,m_DibHead->biWidth,m_DibHead->biHeight, m_Image,(LPBITMAPINFO)m_DibHead,DIB_RGB_COLORS, SRCCOPY); return TRUE;BOOL CZhangjianView:MemToDib(LPVOID lmem) /得到内存中位图像素信息Clear();m_DibHead=(LPBITMAPINFOHEADER)lmem;SetPaletteSize(m_DibHead->biBitCount);m_Image=(LPBYTE)

26、m_ColorList+sizeof(RGBQUAD)*m_nPalette;GetPalette();return TRUE;CSize CZhangjianView:GetDibSize() /返回位图尺寸if(m_DibHead=NULL) return CSize(0,0);return CSize(int)m_DibHead->biWidth,(int)m_DibHead->biHeight);10. 编译测试,无误后进入下一步;11. 加入图像文件读取与显示的代码;(1) 设置初始化函数,加入如下代码;m_x=25;CSize MaxSize(24000,32000);

27、CSize MinSize(MaxSize.cx/100,MaxSize.cy/100);SetScrollSizes(MM_HIMETRIC,MaxSize,MaxSize,MinSize);LPVOID lFirstBMP=(LPVOID):LoadResource(NULL,:FindResource(NULL,MAKEINTRESOURCE(IDB_BITMAP1),RT_BITMAP);MemToDib(lFirstBMP);(2)在位图编辑器中,编写一初始位图,命名为:张鉴,并保存;(3)建立文件打开的消息映射函数OnFileOpen(),并加入如下代码; CFileDialog

28、filedlg(TRUE,"bmp","*.bmp"); if(filedlg.DoModal()!=IDOK) return; CFile myfile; myfile.Open(filedlg.GetPathName(),CFile:modeRead); if(ReadFile(&myfile)=TRUE) Invalidate(); SetPalette();(4)修改OnDraw函数,并加入如下代码; BeginWaitCursor(); CSize DibSize = GetDibSize(); DibSize.cx *= m_x; D

29、ibSize.cy *= -m_x; DibToDC(pDC, DibSize); EndWaitCursor();(5)至此,上述代码已经完成读取并显示位图的功能。数据存放在视图类中m_Image指向的内存区域。12. 位图显示如下图:五、 实验总结1. 通过本实验进一步熟悉了VC+6.0集成开发环境;2. 初步学习了VC6.0下bmp位图的读取与显示;实验二 图像基本运算点运算一、 实验目的1. 学习位图的基本运算的基本原理;2. 学习掌握实现位图各类点运算的基本算法。二、 实验原理1. 点运算的定义设输入图像的灰度为f(x,y),输出图像的灰度为g(x,y),则点运算可以表示为:g(x,

30、y)=Tf(x,y),即灰度变换函数。其中T 是对f在(x,y)点值的一种数学运算,即点运算是一种像素的逐点运算,是灰度到灰度的映射过程,故称T 为灰度变换函数。点运算可以改变图像数据所占据的灰度值范围,从而改善图像显示效果。2. 点运算的分类点运算可分为线性点运算,分段线性点运算,非线性点运算3. 线性点运算线性点运算的灰度变换函数形式可以采用线性方程描述,即s=ar+b。0<a<1,b>0,输出灰度压缩;a=1,b=0,输出灰度不变;a>1,b=0输出灰度扩展整体变亮;0<a<1,b=0,输出灰度压缩,整体变暗。图像反转(反色)。4. 分段线性点运算将感

31、兴趣的灰度范围线性扩展,相对抑制不感兴趣的灰度区域。设f(x,y)灰度范围为0,Mf,g(x,y)灰度范围为0,Mg: 5. 非线性点运算非线性点运算的输出灰度级与输入灰度级呈非线性关系,常见的非线性灰度变换为对数变换和幂次变换。(1) 对数变换对数变换的一般表达式为: s = c log(1 + r)其中C是一个常数。(2) 幂次运算幂次变换的一般形式为:其中C和为正常数。三、 实验内容在实验一的基础上编程实现各类点运算。四、 实验步骤1. 在Resources面板中,找到Menu,双击其下IDR_MAINFRAME,打开菜单编辑器,在主菜单中添加一菜单项“点运算”,再添加“线性”,“反色”

32、,“分段线性”,“对数”,“指数”,“”二值化”子菜单,并设置相应不同的ID。2. 打开类向导,分别对每一个子菜单建立消息响应函数。3. 对每一个消息响应函数添加对应代码,实现相应的功能,具体如下:void CZhangjianView:OnXianxing() /线性运算/ TODO: Add your command handler code herelong w,h;long i,j;if(m_DibHead=NULL)MessageBox("当前无图像,请打开图像!","提示");return;w=m_DibHead->biWidth;h=

33、m_DibHead->biHeight;unsigned char *f=new unsigned char w*h;memset(f,0,w*h);float a=80;float b=50;float s(0);for(i=0;i<h;i+)for(j=0;j<w;j+)s=a*m_Imagei*w+j+b;if(s<0)s=0;if(s>255)s=255;fi*w+j=(unsigned char)(s);memcpy(m_Image,f,w*h);Invalidate();delete f;void CZhangjianView:OnFenduanxia

34、nxing() /分段线性/ TODO: Add your command handler code herelong w,h;long i,j;if(m_DibHead=NULL)MessageBox("当前无图像,请打开图像!","提示");return;w=m_DibHead->biWidth;h=m_DibHead->biHeight;unsigned char *f=new unsigned char w*h;memset(f,0,w*h);float a(48),b(180);float b1(20);float c(25),d(

35、190);float s(0);for(i=0;i<h;i+)for(j=0;j<w;j+)if(0<m_Imagei*w+j&&m_Imagei*w+j<a)s=(c/a)*m_Imagei*w+j+b1;if(a<m_Imagei*w+j&&m_Imagei*w+j<b)s=(d-c)/(b-a)*(m_Imagei*w+j-a)+c;if(b<m_Imagei*w+j&&m_Imagei*w+j<255)s=(255-d)/(255-b)*(m_Imagei*w+j-b)+d;if(s<

36、0)s=0;if(s>255)s=255;fi*w+j=(unsigned char)(s);memcpy(m_Image,f,w*h);Invalidate();delete f;void CZhangjianView:OnDuishu() /对数运算/ TODO: Add your command handler code herelong w,h;long i,j;if(m_DibHead=NULL)MessageBox("当前无图像,请打开图像!","提示");return;w=m_DibHead->biWidth;h=m_DibHe

37、ad->biHeight;unsigned char *f=new unsigned charw*h;memset(f,0,w*h);float c=100;double s(0);for(i=0;i<h;i+)for(j=0;j<w;j+)s=c*log10(m_Imagei*w+j+1);if(s<0)s=0;if(s>255)s=255;fi*w+j=(unsigned char)(s);memcpy(m_Image,f,w*h);Invalidate();delete f;void CZhangjianView:OnZhishu() /指数运算/ TODO

38、: Add your command handler code herelong w,h;long i,j;if(m_DibHead=NULL)MessageBox("当前无图像,请打开图像!","提示");return;w=m_DibHead->biWidth;h=m_DibHead->biHeight;unsigned char *f=new unsigned char w*h;memset(f,0,w*h);float c=80;float r=1.5;float b=50;double s(0);for(i=0;i<h;i+)f

39、or(j=0;j<w;j+)s=c*pow(m_Imagei*w+j,r);if(s<0)s=0;if(s>255)s=255;fi*w+j=(unsigned char)(s);memcpy(m_Image,f,w*h);Invalidate();delete f;void CZhangjianView:OnFanse() /反色/ TODO: Add your command handler code herelong w,h;long i,j;if(m_DibHead=NULL)MessageBox("当前无图像,请打开图像!","提示&q

40、uot;);return;w=m_DibHead->biWidth;h=m_DibHead->biHeight;unsigned char *f=new unsigned charw*h;memset(f,0,w*h);for(i=0;i<h;i+)for(j=0;j<w;j+)m_Imagei*w+j=255-m_Imagei*w+j;fi*w+j=(unsigned char)(m_Imagei*w+j);memcpy(m_Image,f,w*h);Invalidate();delete f;void CZhangjianView:OnErzhihua() /二值化

41、/ TODO: Add your command handler code herelong w,h;long i,j;if(m_DibHead=NULL)MessageBox("当前无图像,请打开图像!","提示");return;w=m_DibHead->biWidth;h=m_DibHead->biHeight;unsigned char *f=new unsigned charw*h;memset(f,0,w*h);float a=127;for(i=0;i<h;i+)for(j=0;j<w;j+)if(0<m_Im

42、agei*w+j&&m_Imagei*w+j<a)m_Imagei*w+j=0;if(a<m_Imagei*w+j&&m_Imagei*w+j<255)m_Imagei*w+j=255;fi*w+j=(unsigned char)(m_Imagei*w+j);memcpy(m_Image,f,w*h);Invalidate();delete f;4. 完成基本过程,打开一幅图像,各种运算结果如下:原图像:线性变换:反色:分段线性:对数运算:指数(幂次)运算:二值化:五、 实验总结1. 通过本次实验学习了位图的基本运算;2. 学习了各类点运算的基

43、本算法。实验三 图像基本运算代数、逻辑运算一、 实验目的1. 进一步学习位图基本运算的原理;2. 学习掌握实现位图代数运算的基本算法;3. 学习掌握实现位图逻辑运算的基本算法。二、 实验原理1. 代数运算代数运算是指两幅或多幅输入图像之间进行点对点的加、减、乘、除运算得到输出图像的过程。如果记输入图像为A(x,y)和B(x,y),输出图像为C(x,y),则有如下四种形式:2. 逻辑运算逻辑运算是指将两幅或多幅图像通过对应像素之间的与、或、非逻辑运算得到输出图像的方法。在进行图像理解与分析领域比较有用。运用这种方法可以为图像提供模板,与其他运算方法结合起来可以获得某种特殊的效果。三、 实验内容1

44、. 在实验二的基础上编程实现位图代数运算;2. 在实验二的基础上编程实现位图逻辑运算。四、 实验步骤1. 在Resources面板中,找到Menu,双击其下IDR_MAINFRAME,打开菜单编辑器,在主菜单中添加一菜单项“代数运算”,再添加“加法运算”,“减法运算”,“乘法运算”,“除法运算”子菜单,并设置相应不同的ID号。2. 同样的方法添加另一菜单项“逻辑运算”加“与运算”,“或运算”,“非运算”子菜单,并设置相应不同的ID号。3. 打开类向导,分别对代数运算和逻辑运算每一个子菜单建立消息响应函数。4. 对每一个消息响应函数添加对应代码,实现相应的功能,具体如下:void CZhangj

45、ianView:OnJiafayunsuan() /加法运算/ TODO: Add your command handler code hereif(m_DibHead=NULL)MessageBox("当前无图像,请打开图像!","提示");return;long i,j;long w,h;w=m_DibHead->biWidth;h=m_DibHead->biHeight;unsigned char *Image1=new unsigned charw*h;memcpy(Image1,m_Image,w*h);OnFileOpen();f

46、or(i=0;i<h;i+)for(j=0;j<w;j+)*(m_Image+i*w+j)=m_Imagei*w+j+Image1i*w+j;Invalidate();delete Image1;void CZhangjianView:OnJianfayunsuan() /减法运算/ TODO: Add your command handler code hereif(m_DibHead=NULL)MessageBox("当前无图像,请打开图像!","提示");return;long i,j;long w,h;w=m_DibHead->

47、biWidth;h=m_DibHead->biHeight;unsigned char *Image1=new unsigned charw*h;memcpy(Image1,m_Image,w*h);OnFileOpen();for(i=0;i<h;i+)for(j=0;j<w;j+)*(m_Image+i*w+j)=m_Imagei*w+j-Image1i*w+j;Invalidate();delete Image1;void CZhangjianView:OnChengfayunsuan() /乘法运算/ TODO: Add your command handler co

48、de hereif(m_DibHead=NULL)MessageBox("当前无图像,请打开图像!","提示");return;long i,j;long w,h;w=m_DibHead->biWidth;h=m_DibHead->biHeight;unsigned char *Image1=new unsigned charw*h;memcpy(Image1,m_Image,w*h);OnFileOpen();for(i=0;i<h;i+)for(j=0;j<w;j+)*(m_Image+i*w+j)=m_Imagei*w+j*

49、Image1i*w+j;Invalidate();delete Image1;void CZhangjianView:OnChufayunsuan() /除法运算/ TODO: Add your command handler code hereif(m_DibHead=NULL)MessageBox("当前无图像,请打开图像!","提示");return;long i,j;long w,h;w=m_DibHead->biWidth;h=m_DibHead->biHeight;unsigned char *Image1=new unsigne

50、d charw*h;memcpy(Image1,m_Image,w*h);OnFileOpen();for(i=0;i<h;i+)for(j=0;j<w;j+)*(m_Image+i*w+j)=m_Imagei*w+j/Image1i*w+j;Invalidate();delete Image1;void CZhangjianView:OnYuyunsuan() /与运算/ TODO: Add your command handler code hereif(m_DibHead=NULL)MessageBox("当前无图像,请打开图像!","提示&qu

51、ot;);return;long i,j;long w,h;w=m_DibHead->biWidth;h=m_DibHead->biHeight;unsigned char *Image1=new unsigned charw*h;memcpy(Image1,m_Image,w*h);OnFileOpen();for(i=0;i<h;i+)for(j=0;j<w;j+)*(m_Image+i*w+j)=m_Imagei*w+j&Image1i*w+j;Invalidate();delete Image1;void CZhangjianView:OnHuoyuns

52、uan() /或运算/ TODO: Add your command handler code hereif(m_DibHead=NULL)MessageBox("当前无图像,请打开图像!","提示");return;long i,j;long w,h;w=m_DibHead->biWidth;h=m_DibHead->biHeight;unsigned char *Image1=new unsigned charw*h;memcpy(Image1,m_Image,w*h);OnFileOpen();for(i=0;i<h;i+)for(j=0;j<w;j+)*(m_Image+i*w+j)=m_I

温馨提示

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

评论

0/150

提交评论