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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

基于MMX技术电子相册Word下载.docx

1、硬件开发环境为Lenovo IdeaPad Y560处理器:Inter(R)Core(TM) i5 CPU M 480 2.67GHz 2.67 GHzRAM:8G三、 实验内容与步骤1、 MMX技术MMX 是MultiMediaeXtensions(多媒体扩展)的缩写,是为了方便处理大量计算的视频、音频等多媒体数据,特地在CPU中加入的专门用来进行多媒体处理的多媒体数据处理指令MMX。MMX CPU极大地提高了电脑的多媒体(如立体声、视频、三维动画等)处理功能。MMX技术是继Intel386(TM)处理器(将体系结构扩展至32位)之后对Intel体系结构的最重要的加强。MMX技术的基础是一项

2、称为单指令、多数据(SIMD)的技术。它使得许多条信息可由一条单一指令来处理,这种平行操作使性能得以大幅度地提高。MMX技术随着出现后就以后再发展着,目前已经到了SSE指令集。在MMX到SSE之间本质是一样的,只是不用的是指令功能的增强和指令数目的增加,使得我们在处理计算密集型的数据时候更够节省更多的时间。以下就简单介绍下MMX/SSE相关的指令及其优点。MMX基本的指令集有拷贝指令、运算指令、分组指令。MOVQ:64位数据拷贝MOVD:32位数据拷贝PUNPCKLBW/PUNPCKLWD/PUNPCKLDQ:将寄存器的32位数据交错组合为64位的数据PACKUSWB:将16位的数据转换为无符

3、号的8位数据PACKSSWB/PACKSSDW:将32/16位数据转化为16/8位数据PADDB/W/D:加法的运算PASUB/W/D:减法运算 等2、 实验步骤及相关代码本实验采用的是MFC架构,在MFC中嵌入MMX代码进行图像的相关的处理。下面简单说明了简单的电子相册需求以及技术实现:1、 打开文件,添加图片2、 在客户区显示客户选择的图片的渐变效果在实现的过程中,按照MFC单文档架构,添加一个计时器,定时从文档中得到要显示的位图数据,并显示在客户区域中。下面给出详细的实验步骤及相关的代码。(1) 建立MFC单文档工程SSE4(2) 添加位图读取的相关的函数库。本实验在实验的过程中,读取B

4、MP文件的代码是清华出版社和北京交通大学出版社出版的杨淑莹老师的VC+图像处理程序设计这本书中的的CDib函数库,主要的功能有:TCHAR* GetFileName(); /得到位图文件的名称 BOOL IsValid(); DWORD GetSize(); /得到位图的大小 UINT GetWidth(); /得到位图的宽度 UINT GetHeight(); /得到位图的高度 UINT GetNumberOfColors(); RGBQUAD* GetRGB(); BYTE* GetData(); /得到位图的像素数据 BITMAPINFO* GetInfo(); WORD Palette

5、Size(LPBYTE lpDIB); /得到调色板的大小 WORD DIBNumColors(LPBYTE lpDIB);voidSaveFile(constCString filename);voidLoadFile(const TCHAR* dibFileName);/加载位图文件在本实验中用到的主要的功能是以上注释出来的代码。另外在使用的过程中,由于我使用的特殊性,存在内存泄露的情况,我根据实际的情况对相关的代码做出了修改,下面给我我对CDib代码的修改:voidCDib:LoadFile(const TCHAR* dibFileName) if(pDib) GlobalFreePtr

6、(pDib);在多次加载文件时候,一直开辟内存空间,但是在源代码中并没有给出释放内存的相关的操作,所以我就在源代码的里面加入了释放内存的操作。(3) 添加相关的全局变量在SSE4DOC.h中定义变量:list photos; /文件打开对话框,用来存储相关位图的文件名intm_nCurrentFade; /当前的渐变因子CDibm_photos_Data;/文件名称对应的像素数据iterator it_data,next_photo_data;/像素数据进行遍历的迭代器CDib *dib_r; /给VIEW返回的要显示的位图数据(4) 添加相关的函数操作以及消息在SSE4Doc类中添加打开菜单

7、项的响应函数OnFileOpen():void CSSE4Doc:OnFileOpen() / TODO:在这里添加代码CFileDialogcfdlg(TRUE , NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT |OFN_ALLOWMULTISELECT|OFN_ENABLESIZING, NULL);DWORD MAXFILE=4000;cfdlg.m_ofn.nMaxFile=MAXFILE;TCHAR* pc=new TCHARMAXFILE;cfdlg.m_ofn.lpstrFile=pc;cfdlg.m_ofn.lpstrFile0=NU

8、LL;cfdlg.m_ofn.lpstrFilter=_T(bmp File0*.bmp0BMP File0*.BMP0);if (cfdlg.DoModal()=IDOK) POSITION pos=cfdlg.GetStartPosition(); if(!photos.empty() photos.clear(); while(pos!=NULL) photos.push_back(cfdlg.GetNextPathName(pos); 通过该函数可以得到相册要显示的文件的名称,填充的是变量list photos .得到文件名称,接下来要做的就是讲对应的位图文件数据加载到内存中,void

9、 LoadAllFile()LoadAllFile(/*CDib dib*/) listiterator it;iterator it_data; CDib* dib=newCDib(); TCHAR tempMAX_PATH; if (!m_photos_Data.empty() m_photos_Data.clear(); for (int i=0;i LoadFile(temp); delete dib;将得到的数据文件存储在变量listGetDib(); if(dib) BYTE *pdata=dib-GetData(); if(dib-GetRGB() CPalette* p=Cre

10、ateBitmapPalette(dib); CPalette* old=pDC-SelectPalette(p,TRUE); pDC-RealizePalette(); StretchDIBits(pDC-GetSafeHdc(),0,0,100,100,0,0,100,100,dib-GetData(),dib-GetInfo(),DIB_RGB_COLORS,SRCCOPY);SelectPalette(old,TRUE); DeleteObject(p); else StretchDIBits(pDC-GetSafeHdc(),0,0,dib-GetWidth(),dib-GetHei

11、ght(),0,0,dib-GetHeight(),dib- TRACE(_T(这里执行的是绘图的函数); else HBITMAP *hBitmap; /定义位图对象句柄 BITMAP BM; CDC MemDC; CClientDCClientDC(this); MemDC.CreateCompatibleDC(&ClientDC); hBitmap=(HBITMAP*): LoadImage ( AfxGetInstanceHandle(), /取得应用程序句柄 _T(init.bmp), /位图文件名 IMAGE_BITMAP, /类型为Windows位图 0,0, LR_LOADFROMFILE); /从文件中取位图数据 MemDC.SelectObject(hBitmap); : GetObject(hBitmap,sizeof(BM),&BM); ClientDC.BitBlt ( 200,80, /目标设备逻辑横、纵坐标 BM.bmWidth, BM.bmHeight, /显示位图的像素宽、高度 &MemDC, /待显示位图数据的设备情境对象 0,0, /源数据中的横、纵坐标 SRCCOPY); /位操作方式 SetTimer(1,10,NUL

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

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