网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
用Delphi实现位图显示特技
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式

作者:张晓辉 王孝军

  在应用程序中引入位图并以多种特技显示,会使程序
界面生动形象,充满魅力。那么在Delphi环境中如何实现
这一切呢?笔者在用Delphi开发一个多媒体系统时发现了
实现位图显示特技的两种方法,下面将对这两种方法予以
介绍,供Delphi爱好者参考。

   一、画布Tcanvas简介

  Delphi中与绘图和位图操作有关的对象是画布Tcanva
s。Tcanvas对象功能强大,封装了WindowsAPI的GDI,用
户可以很方便地在画布上绘制直线、矩形、椭圆、多边形
等基本图形,还可以显示、拷贝位图,却不必关心设备上
下文等GDI概念,极大地方便了用户。Tcanvas对象本身并
不是一个构件,不单独使用,它总是作为其它对象的属性
来使用的。Delphi有四个对象具有画布属性,它们是TForm
、TImage、TPaintbox和Tbitmap,其中前三者是可视化构
件。至于Tcanvas的详细情况,可以参考Delphi的联机帮
助。

  实现简单的位图显示特技,实际上就是以不同的方式
逐渐将源位图拷贝到Tcanvas类型的对象上,如从位图的
中央开始拷贝一个矩形区域到屏幕中央,矩形区域不断扩
大直到拷贝整个位图,其视觉效果就是位图从屏幕中央向
四周扩散。不同的拷贝方式就形成了多种特技形式,如扩
散、拉动和百叶窗等。对于每种特技形式灵活运用,又可
演变出多种花样,如扩散可以演变为从上向下、从左向右
、从中间向四周和相反方向的扩散,以及从一角向对角方
向扩散的特技花样。

  实现上述位图显示特技的原理很简单,关键是怎样实
现位图的拷贝。在Delphi中有两种拷贝位图的方法,相应
地就有两种实现位图显示特技的方法,一种是用Tcanvas
对象的方法CopyRect,另一种是调用WindowsAPI的BitBlt
函数。下面就以两种特技的实现为例分别介绍这两种方法


   二、方法之一:调用CopyRect

  Tcanvas对象与拷贝位图有关的是CopyMode属性和Cop
yRect方法,其中CopyMode定义拷贝的模式,而CopyRec
t执行位图拷贝的操作。当CopyMode定义为缺省值cmSrcCo
py时,CopyRect将源画布上的一部分位图拷贝到目标画布
上的一个矩形区域内。CopyRect的过程声明及参数意义如
下:

  procedureCopyRect(Dest:TRect;Canvas:TCanva
s;Source:TRect);

  Dest目标画布上的矩形区域

  Canvas源画布

  Source源画布上的矩形区域

  下面以一个拉动特技的实现为例,说明如何用CopyRe
ct方法实现特技。该例包括三个构件:Tform1、Teditl
和Tbuttonl,变量step控制拉动的步骤。程序运行后,从
Teditl中输入待显示位图文件名,然后单击Tbuttonl,这
时位图从左侧出现并逐渐向右侧移动,好似位图被从左向
右拉动一样,拉动结束后位图左上角坐标为(x0,y0)。
该例程序清单如下所示:

  procedureTForml.ButtonlClick(Sender:TObject
);

  conststepΚ200;

  x0Κ20;

  y0Κ20;

  varbitmap:tbitmap;

  midx:integer;{中间变量,当前步骤所拷贝位图
的宽}

  ratiox:real;{每步位图宽度增加量}

  i:integer;

  rect1,rect2:trect;{源、目标矩形区域}

  begin

  bitmap:Κtbitmap.create;

  bitmap.loadfromfile(edit1.text);

  ratiox:Κbitmap.width/step;

  fori:Κotostepdo

  begin

  midx:Κround(ratiox*i);

  withrect1do

  begin

  left:Κbitmap.width-midx;

  topΚ0;

  right:Κbitmap.width;

  bottom:Κbitmap.height;

  end;

  withrect2do

  begin

  left:Κx0;

  top:Κy0;

  right:Κx0+midx;

  bottom:Κyo+bitmap.height;

  end;

  canvas.copyrect(rect2,bitmap.canvas,rect1
);

  end;

  bitmap.free;

  end;

   三、方法之二:调用BitBlt函数

  这里涉及到了在Delphi中如何
  • 上一篇资讯: Windows API函数使用技巧
  • 下一篇资讯: 显示密码的原理
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号