网站大量收购独家精品文档,联系QQ:2885784924

SSE4电子相册答题.docx

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于SSE4的电子相册 问题概述 利用SSE4技术实现图片的淡入淡出效果,设计出一个电子相册。 问题分析 根据题目要求,首先利用VC++中的MFC框架构建电子相框,初步完成图片的显示功能。利用加权平均公式: Resultpixel=Apixel-Bpixel*fade+Bpixel,(1) 在fade因子从1渐变为0的过程中,产生一系列A、B的中间图像,实现A图像到B图像的淡入淡出效果,计算过程使用SSE4技术嵌入汇编完成。 详细设计 3.1设计概述 首先在Visual Studio2010中创建一个MFC工程,本设计主要用到的类是MFC框架中的CXXView类(其中XX是工程名,本设计创建的工程名为:SSE4),在该类构造函数CSSE4View::CSSE4View()中实现本地4张图片的加载,得到图片的副本。然后在CSSE4View::OnDraw(CDC* pDC)中完成图片的显示,利用上述公式,将两张图片的渐变过程分为128帧,具体令fade因子从128/128渐变为0,分子每减一次1,便调用CSSE4View::HANDLE(int factor,int k1,int k2)函数,利用嵌入SSE4技术的汇编程序计算出中间图像,返回主调函数在界面上显示这一帧的图像,128帧的逐一显示即可完成第一张图片到第二张图片的彻底转变,重复上述行为显示第二张到第三张图片以及剩余图片的渐变即可设计出一个电子相册。 3.2设计过程 本文结合具体代码论述该电子相册的实现过程。 首先在‘SSE4View.h’文件的SSE4View类中声明以下变量(SIZE为#define宏定义,在这里=4): 变量说明CBITMAP m_bitmap[SIZE]加载本地四张图片的存储变量BYTE* m_newptr[SIZE]四张图片的副本存储变量BYTE* m_tarptr合成的中间图像存储变量并声明类方法:BYTE HANDLE(int factor,int k1,int k2),该方法具体实现合成中间图像的计算过程。 在CSSE4View::CSSE4View()中,用loadImage()打开4张图片,存储到hBitmap[SIZE],将其加载到m_bitmap[SIZE]中,再创建结构体数组变量bm[SIZE]获得图片的基本信息,具体包括图片存储的首地址、图片的宽度、高度等信息。为了防止破换原图片,保险起见,本设计将图片拷贝到m_newptr[SIZE]中,由于loadImage只能打开.bmp格式的图片,所以本设计具有一定的局限性,只能实现图片为24位.bmp格式的电子相册。每个像素点占24位,即3个字节,利用memcpy()函数每次实现一个像素的拷贝,根据bm[]中图像的首地址、宽度和高度信息实现所有像素的拷贝即可得到图片的副本。 在void CSSE4View::OnDraw(CDC* pDC)中,循环SIZE次依次实现每两张图片的淡入淡出,本设计将图片的渐变过程设置成128帧,即fade因子从128/128渐变到0,调用HANDLE()函数根据上述公式得到中间图像m_tarptr,调用函数pDC-SetPixel()以RGB格式显示此中间图像。 在BYTE CSSE4View::HANDLE(int factor,int k1,int k2)中利用SSE4汇编指令具体计算上述公式生成中间图像。SSE4指令能对多组数据进行并行处理,含有多个128位的寄存器,考虑到计算过程中可能存在溢出,本设计具体实现时采用的是8组并行,即一次处理可8个字节的数据,利用SSE4指令中的扩展命令对其进行扩展,每个数据占16位来保证数据的正确性,在不考虑其他因素的情况下,性能可提高8倍。 在开始两张图像的中间合成前要做好下面几个数据准备:(1)得到两张原图和合成图的首地址;(2)将当前渐变因子复制存储到容量为8的数组fade[8]中,来支持8个数据的并行运算。(3)计算公式迭代次数,利用图片的宽度和高度得到像素个数,每个像素占3个字节,得到整张图片的字节数all,由于一次计算可以处理8个字节的数据,all/8即可求出迭代次数。 接下来嵌入SSE4指令的汇编来具体合成图片,将地址、迭代次数、渐变因子送入寄存器中,将渐变因子扩展到128位,以每次处理8个字节为基准来处理整幅图的像素,进入循环后,扩展原图数据到128位,利用前面提到的公式(1),根据SSE4提供的指令对原数据进行计算,由于这里我们将渐变因子的浮点形式写成了除法形式:fade/128(其中渐变因子fade为分子),在乘完fade后我们要将结果右移8位来做除法运算。将合成后的结果赋值给目的地址所指向的内存单元。在经历了多次迭代后得到整张中间图片。 结果展示 附录 代码实

您可能关注的文档

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

我是一名原创力文库的爱好者!从事自由职业!

1亿VIP精品文档

相关文档