图形显示特技算法

水平百叶窗:将图象分成若干等份,每次扫描各等份的1象素宽后Sleep一段时间,再扫描下一象素,直到每份的象素都扫描完。

雨滴效果:读入位图的最后一行象素,从屏幕的最上端开始移动到象素的实际位置;接着读入倒数第一行象素,依次类推。

具体步骤如下:

  • 1.在工程中加入变量: CDC memdc;
    CBitmap m_bitmap;
  • 2.在资源中加入位图资源,ID为IDB_BITMAP1;
  • 3.在构造函数中加入初始化代码: m_bitmap.LoadBitmap(IDB_BITMAP1);
  • 4.在OnDraw(CDC* pDC)中加入如下代码: void CMyView::OnDraw(CDC* pDC)
    {
      CMyDoc* pDoc = GetDocument();
      ASSERT_VALID(pDoc);
      int width;      // 位图的宽度
      int height;      //位图的高度
      if(!memdc.GetSafeHdc())
        {
          memdc.CreateCompatibleDC(pDC);
          memdc.SelectObject(&m_bitmap);
        }
        //获取位图大小信息
        BITMAP bm;
        m_bitmap.GetBitmap(&bm);
        width=bm.bmWidth;
        height=bm.bmHeight;
      if(next==2)//水平向左扫描
      {
        
        for(int i=0;i<width;i++)
        {
          pDC->BitBlt(i,0,1,height,&memdc,i,0,SRCCOPY);
          Sleep(1);
        }
      }
      else if(next==1)//水平向右扫描
      {
        
        for(int i=width-1;i>=0;i--)
        {
          pDC->BitBlt(i,0,1,height,&memdc,i,0,SRCCOPY);
          Sleep(1);
        }
      }
      else if(next==3)//水平百叶窗
      {
        
        //每条20象素宽
        int num=width/20;
        for(int i=0;i<20;i++)
        {
          //分别扫描每条
          for(int j=0;j<num;j++)
          {
            pDC->BitBlt(j*20+i,0,1,height,&memdc,j*20+i,0,SRCCOPY);
            
          }
          Sleep(10);
        }
      }
      else if(next==4)//垂直百叶窗
      {
        int num=height/20;
        for(int i=0;i<20;i++)
        {
          //分别扫描每条
          for(int j=0;j<num;j++)
          {
            pDC->BitBlt(0,j*20+i,width,1,&memdc,0,j*20+i,SRCCOPY);
            
          }
          Sleep(10);
        }
      }
      else if(next==5)//雨滴效果
      {
        for(int i=height-1;i>=0;i--)
        {
          for(int j=0;j<i;j++)
          {
            pDC->BitBlt(0,j,width,1,&memdc,0,i,SRCCOPY);
            Sleep(10);
          }
         
        }
      }
      // TODO: add draw code for native data here
    }  
    其它实现细节请参见源代码。
时间: 2024-10-26 11:49:42

图形显示特技算法的相关文章

闪屏图形特技效果的实现

在程序实际开发中,闪屏是我们经常用到的.如果程序初始化要一些时间,设计闪屏更加有必要,不但使你的程序也漂亮,还能在上面写上你的版本信息.好处是多多的.在VC++6.0组件库中有一个splash screen闪屏组件,可以添加到程序中.但是初学者打开源代码学习时,里面函数太多,一时之间也搞不明白.而且显示的闪屏很呆板.为了使初学者明白,我搞了一个很简单的类,里面只有二个函数,结构很清晰.一看就明白,还有详细的注释.功能并不比VC++6.0自带那个逊色. 闪屏其实就是窗口,其基类是CWnd,与一般的

056_《Delphi应用程序开发精彩实例》

<Delphi应用程序开发精彩实例> Delphi 教程 系列书籍 (056) <Delphi应用程序开发精彩实例> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Pdf 作者: 杨志国 王小琼 李世姣 丛书名: 其他 出版社:机械工业出版社* ISBN:7111116135 上架时间:2003-4-17 出版日期:2003 年4月 开本:16开 页码:411 版次:1-1 内容简介 作为一个优秀的.面向对象的可视化开发工具,Delphi拥有快捷方便的开

用CB实现图像的特技显示

在网页.软件和游戏中,我们经常可以看到图像的各种特技显示,如中心扩散.百叶窗帘.右下推出等,这种动感图像显示,往往给人一种赏心悦目的感觉,给我们的应用程序增加了一些美感.在C++ Builder中,我们可以很容易地实现这些功能.下面以一个具体的例子,介绍实现中心扩散和百叶窗帘两种显示技巧,并说明在C++ Builder中处理图像的基本方法. 在C++ Builder中新建一个工程,然后在窗体上添加一个Image图像控件,把它的Picture属性设置为一幅bmp图像,调节Image控件尺寸与图像的

KNN算法对新上市汽车评估分析

应用IBM SPSS Statistic 的最近邻元素分析模型(NNA)对汽车厂商预研车型进行市场评估.分析新车型的技术指标是否达标,预测新车型投放市场后的预期销售额. 4.1 研究背景 某汽车制造厂商研发了一款新车型,为了提升影响力,提高收益产出比,在投入市场之前希望能够对市场进行考核,增加两项技术设计指标,通过对已有的相关数据和技术指标进行对比,从而通过验证来检验新车型的技术指标是否能够达到预期效果. 4.2 研究目的 某汽车制造厂商的研发部门制定出两款新预研车型的技术设计指标,厂商的决策层

《逆袭大学》文摘——9.5 用算法和数学奠定专业基础

有不少读者给我来信,咨询的是关于数学和算法对学习计算机的意义.这样的话题,在我的专栏中很多文章里都提到过.在拙作<逆袭大学--传给IT学子正能量>中,在这方面写了不少文字,现将其中的9.5节全文摘录在此文中,以供参考. 更多话题,见<逆袭大学--传给IT学子正能量>全书目录. 9.5 用算法和数学奠定专业基础 一个程序设计的初学者,在刚刚开始学习时,会认为编程中语言是最重要的.没有语言,没有掌握好编程语言,写不出程序来.而后又知道熟练运用语言仅仅是学会了一种表达的方式而已,如同一个

怎样的中奖算法能让人信服(转)

  话说写一个抽奖程序还不容易,不就是生成一个随机数吗,哪需什么算法之类的. 从技术上说,这确实不难.事实上,你怎么写都可以,因为程序只运行在特定的设备上,外人根本无法了解其中的细节. 那么问题就来了,如何才能让大家相信你没有作弊? 你会说,我可以把程序开源,抽奖前大家监督运行.不过这样就一定可信了吗? 就算程序没问题,也不代表系统就是可靠的.或许你早已偷偷开了外挂,这样无论程序有多公正,结果仍躲不出魔掌. 那就退一步吧,每次开奖前重装一次系统. 不过,假设所有的软件都可信,但最终仍需通过硬件来

《BI那点儿事》Microsoft 聚类分析算法——三国人物身份划分

原文:<BI那点儿事>Microsoft 聚类分析算法--三国人物身份划分 什么是聚类分析? 聚类分析属于探索性的数据分析方法.通常,我们利用聚类分析将看似无序的对象进行分组.归类,以达到更好地理解研究对象的目的.聚类结果要求组内对象相似性较高,组间对象相似性较低.在三国数据分析中,很多问题可以借助聚类分析来解决,比如三国人物身份划分.聚类分析的基本过程是怎样的?  选择聚类变量 在分析三国人物身份的时候,我们会根据一定的假设,尽可能选取对角色身份有影响的变量,这些变量一般包含与身份密切相关的

python实现马耳可夫链算法实例分析

  本文实例讲述了python实现马耳可夫链算法的方法.分享给大家供大家参考.具体分析如下: 在<程序设计实践>(英文名<The Practice of Programming>)的书中,第三章分别用C语言,C++,AWK和Perl分别实现了马耳可夫链算法,来通过输入的文本,"随机"的生成一些有用的文本. 说明: 1. 程序使用了字典,字典和散列可不是一个东西,字典是键值对的集合,而散列是一种能够常数阶插入,删除,不过可以用散列来实现字典. 2. 字典的setd

php-perl哈希算法实现

 php-perl哈希实现算法–DJBX33A(Daniel J. Bernstein, Times 33 with Addition)APR哈希默认算法  代码如下: APR_DECLARE_NONSTD(unsigned int) apr_hashfunc_default(const char *char_key,                                                       apr_ssize_t *klen) {     unsigned i