ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:79.32KB ,
资源ID:22912810      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22912810.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(2MFCbmp图片读取保存Word格式.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

2MFCbmp图片读取保存Word格式.docx

1、b. 在read中malloc只能申请4字节的空间,但fread(,m_nImage,)读入位图大小个。第一步:添加BMP信息文件头文件新建创建ImageStruct.h包含BMP格式的文件头部分的结构。打开ImageStruct.h并添加代码:重点注意:1.bmp结构头必须定义成BITMAPFILEHEADER_ 不能定义成BITMAPFILEHEADER;因为在MFC中已存在BITMAPFILEHEADER的定义,在定义成它会显示重复定义。同时自己定义的在View.h和View.cpp中注意引用#include “ImageStruct.h”。2.在后面的引用bmp结构时我定义成系统自带的

2、结构:BITMAPFILEHEADER bfh;BITMAPINFOHEADER bih;而不是BITMAPFILEHEADER_ ,因为MFC中用自带的定义图片头文件信息是正确的,但在位图信息块总会在文件最后多出2字节并默认为CD(0x16进制)。原因可能是自定义的图片头文件少2字节,在后面补充了2字节。(未知)/*/* BMP位图文件包括4部分: */* 位图文件头结构BITMAPFILEHEADER */* 位图信息头结构BITMAPINFOHEADER */* 位图颜色表RGBQUAD */* 位图像素数据 */#ifndef _IMAGESTRUCT_#define _IMAGEST

3、RUCT_/*14byte BMP文件头含有BMP文件的类型、大小、位图文件的保留字、位图数据距文件头的偏移量*/typedef struct T_BITMAPFILEHEADER WORD bfType; /2byte 位图文件的类型,必须为BM 0x424d DWORD bfSize; /4byte 位图文件的大小,以字节为单位 WORD bfReserved1; /2byte 位图文件保留字,必须为0 WORD bfReserved2;DWORD bfOffBits; /4byte 位图数据距文件头的偏移量(字节) BITMAPFILEHEADER_;/*40byte BMP位图信息头用

4、于说明位图的尺寸等信息*/typedef struct T_BITMAPINFOHEADER DWORD biSize; /本结构所占用字节数LONG biWidth; /位图的宽度,以像素为单位LONG biHeight; /位图的高度,以像素为单位WORD biPlanes; /目标设备的级别,必须为1WORD biBitCount; /每个像素所需的位数,必须是1(双色)、4(16色)、8(256色)或24(真彩色)之一DWORD biCompression;/位图压缩类型,必须是 0(不压缩)1(BI_RLE8压缩类型)或2(BI_RLE压缩类型)之一DWORD biSizeImage

5、; /位图的大小,以字节为单位LONG biXPelsPerMeter; /位图水平分辨率,每米像素数LONG biYPelsPerMeter; /位图垂直分辨率,每米像素数DWORD biClrUsed; /位图实际使用的颜色表中的颜色数DWORD biClrImportant; /位图显示过程中重要的颜色数 BITMAPINFOHEADER_;/*BMP位图颜色表*/typedef struct T_RGBQUAD BYTE rgbBlue; /蓝色的亮度(值范围为0255) BYTE rgbGreen; /绿色的亮度(值范围为0255) BYTE rgbRed; /红色的亮度(值范围为0

6、255) BYTE rgbReserved; /保留,必须为0 RGBQUAD_;#endif第二步:在.View.h中添加共有成员变量和成员函数1.找到.View.h头文件添加:#include ImageStruct.h2.在Class CBmpDrawView : public Cview中的public中添加成员变量函数:public:/用来保存bmp格式图片bool SaveBmp(LPCSTR lpFileName);/用来读取bmp图片bool ReadBmp();/用来显示指定位图jpg、gif的函数bool ShowJpgGif(CDC* pDC,CString strPat

7、h, int x, int y);/用来显示指定位图bmp的函数 void ShowBitmap(CDC* pDC,CString BmpName);/*CBitmap m_bitmaplin; 创建临时位图对象进行处理*/CBitmap m_bitmap; /创建位图对象CString EntName; /保存图像文件扩展名CString BmpName; /保存图像文件文件名int m_nWidth; /图像实际宽度int m_nHeight; /图像实际高度int m_nDrawWidth; /图像显示宽度int m_nDrawHeight; /图像显示高度DWORD m_nImage;

8、 /图像数据的字节数 只含位图 DWORD相当于long intDWORD m_nSize; /图像文件大小int m_nLineByte; /图像一行所占字节数int m_nBitCount; /图像每个像素所占位数int m_nPalette;/*注意:信息头必须条用系统bmp的结构BITMAPFILEHEADER 否则会多2字节*/BITMAPFILEHEADER bfh; /全局变量文件头BITMAPINFOHEADER bih; /全局变量信息头RGBQUAD *m_pPal; /颜色表指针BYTE *m_pImage; /读入图片数据后的指针 BYTE相当于 unsigned ch

9、arvirtual CBmpDrawView();第三步:添加readbmp函数添加函数的方法:a.在View.h的public中直接添加函数bool ReadBmp()像第二步中一样;然后在View.cpp中添加函数:bool CBmpDrawView:ReadBmp()。b.选中ClassView区-选中View类右键-增加成员变量函数函数类型为bool函数名为ReadBmp()函数Access为public。程序会自动在View.cpp中添加函数:c.添加代码:/*写入bmp格式图片过程*/ReadBmp() FILE *fp = fopen(BmpName,rb); /读取bmp图片

10、BmpName为图片的绝对路径 if(fp=0) AfxMessageBox(无法打开文件!,MB_OK,0); return 0; /*读取文件头 全局变量bfh BITMAPFILEHEADER 定义在ImageStruct中*/*解决BMP格式倒置的方法 (CSDN) fread(&bfh,sizeof(BITMAPFILEHEADER),1,fp);倒置*/ fread(&bfh.bfType,sizeof(WORD),1,fp);bfh.bfSize,sizeof(DWORD),1,fp);bfh.bfReserved1,sizeof(WORD),1,fp);bfh.bfReserv

11、ed2,sizeof(WORD),1,fp);bfh.bfOffBits,sizeof(DWORD),1,fp); m_nSize = bfh.bfSize; /图像文件的总字节数 /*判断是否是bmp格式图片 BM*/ if(bfh.bfType!=0x4d42) AfxMessageBox(不是BMP格式图片! /*读取信息头*/*解决BMP格式倒置的方法fread(&bih,sizeof(BITMAPINFOHEADER),1,fp);bih.biSize,sizeof(DWORD),1,fp);bih.biWidth,sizeof(LONG),1,fp);bih.biHeight,si

12、zeof(LONG),1,fp);bih.biPlanes,sizeof(WORD),1,fp);bih.biBitCount,sizeof(WORD),1,fp);bih.biCompression,sizeof(DWORD),1,fp);bih.biSizeImage,sizeof(DWORD),1,fp);bih.biXPelsPerMeter,sizeof(LONG),1,fp);bih.biYPelsPerMeter,sizeof(LONG),1,fp);bih.biClrUsed,sizeof(DWORD),1,fp);bih.biClrImportant,sizeof(DWORD

13、),1,fp); if(bih.biSize!=sizeof(bih) AfxMessageBox(本结构所占用字节数出现错误 /*位图压缩类型:必须是0(不压缩)、1(BI_RLE8压缩类型)、2(BI_RLE压缩类型)之一*/ if(bih.biCompression = BI_RLE8 | bih.biCompression = BI_RLE4) AfxMessageBox(位图被压缩! /*获取图像高宽和每个像素所占位数*/ m_nHeight = bih.biHeight; m_nWidth = bih.biWidth; m_nDrawHeight = bih.biHeight; m

14、_nDrawWidth = bih.biWidth; m_nBitCount = bih.biBitCount; /每个像素所占位数 /*计算图像每行像素所占的字节数(必须是4字节的倍数) 2种方法*/ /m_nLineByte = (m_nWidth*m_nBitCount/8+3)/4*4;m_nLineByte = (m_nWidth*m_nBitCount+31)/32*4;/*计算图片位图的大小 长*宽*3为24位bmp位图大小3表示rgb*/ m_nImage = m_nLineByte * m_nHeight; /*位图实际使用的颜色表中的颜色数 biClrUsed 注:24位b

15、mp不用改参数*/ m_nPalette = 0; if(bih.biClrUsed) m_nPalette = bih.biClrUsed; /*申请位图空间 大小为位图大小 m_nImage*/ /*注意:malloc只能申请4字节的空间(未知) 但fread(,m_nImage,)读入位图大小个*/ m_pImage=(BYTE*)malloc(m_nImage); fread(m_pImage,m_nImage,1,fp);要关闭fp*/ fclose(fp); return true;第四步:添加保存menu控件和函数a.查看-建立类导向(Ctrl+W)-CpictureXSView

16、(类名)-ID_FILE_SAVE(IDs列表)-COMMAND(Messages列表)-默认成员函数名为OnFileSave-Member Functions(成员函数)中双击该函数进入函数编辑。b.注意:Ctrl+W把另存为也设置成与保存相同的函数。ID_FILE_SAVE_AS-COMMAN-函数OnFileSaveAs改名为OnFileSave。/*文件保存*/void CBmpDrawView:OnFileSave() / TODO: Add your command handler code hereCString filter; filter=所有文件(*.*)|*.bmp;*.

17、jpg;*.gif;*.tiff| BMP(*.bmp)|*.bmp| JPG(*.jpg)|*.jpg| GIF(*.gif)|*.gif| TIFF(*.tiff)|*.tiff|;/*重点:1-文件打开 0-文件保存*/ CFileDialog dlg(0,NULL,NULL,OFN_HIDEREADONLY,filter,NULL); /产生保存对话框 /*按下确定按钮*/ if( dlg.DoModal() = IDOK ) CString str; CString strName; CString filename; str = dlg.GetPathName(); /获取文件的路

18、径 filename = dlg.GetFileTitle(); /获取文件名 int nFilterIndex=dlg.m_ofn.nFilterIndex; if( nFilterIndex = 2 ) /当用户选择文件过滤器为.BMP时 str = str + .bmp /自动加扩展名.bmp SaveBmp(str); /保存bmp图片 就是一个写出图片的过程 AfxMessageBox(图片保存成功第五步:添加保存函数SaveBmp添加函数原理同第三步添加Readbmp函数,在添加下列代码:/*保存bmp格式图片 写出图片的过程 只处理24像素的图片 该图片无调色板*/SaveBmp

19、(LPCTSTR lpFileName) /*lpFileName为位图文件路径名*/ /AfxMessageBox(lpFileName); FILE *fpo = fopen(BmpName, FILE *fpw = fopen(lpFileName,wbbfh,sizeof(BITMAPFILEHEADER),1,fpo);bih,sizeof(BITMAPINFOHEADER),1,fpo); fwrite(&bfh,sizeof(BITMAPFILEHEADER),1,fpw);bih,sizeof(BITMAPINFOHEADER),1,fpw); /*malloc只能申请4字节的

20、空间 (未知)*/ fread(m_pImage,m_nImage,1,fpo); fwrite(m_pImage,m_nImage,1,fpw); fclose(fpo); fclose(fpw);第六步:在word1中的修改a. 在void CPictureMapView:ShowBitmap(CDC* pDC,CString BmpName)中实现图片可以压缩伸展显示的功能:/*/*图片显示调用函数BitBlt变成StretchBlt */ /pDC-BitBlt(0,0,m_bmp.bmWidth,m_bmp.bmHeight,&dcBmp,0,0,SRCCOPY);if(m_nDra

21、wWidth650 & m_nDrawHeightStretchBlt(0,0,m_nDrawWidth,m_nDrawHeight,&dcBmp,0,0,m_bmp.bmWidth,m_bmp.bmHeight,SRCCOPY); /显示原图elseStretchBlt(0,0,640,640,&/显示大小横为640*640b. 在void CPictureMapView:OnDraw(CDC* pDC)函数中添加ReadBmp读取图片:if( EntName.Compare(_T(bmp) = 0 ) /bmp格式 ReadBmp(); /图片信息保存如全局变量 ShowBitmap(pDC,BmpName); /显示图片

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1