| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    想学好编程,学好外语很重要  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> 应用开发 >> delphi >> 多媒体类 >> 文章正文
用DELPHI实现位图显示特技            【字体:
用DELPHI实现位图显示特技
作者:不祥    文章来源:-    点击数:    更新时间:2006-12-12

width="84%">
用DELPHI实现位图显示特技

 在应用程序中引入位图并以多种特技显示,会使程序界面生动形象,充满魅力。那么在Delphi环境中如何实现这一切呢?笔者在用Delphi开发一个多媒体系统时发现了实现位图显示特技的两种方法,下面将对这两种方法予以介绍,供Delphi爱好者参考。
  一、画布Tcanvas简介
 Delphi中与绘图和位图操作有关的对象是画布Tcanvas。Tcanvas对象功能强大,封装了WindowsAPI的GDI,用户可以很方便地在画布上绘制直线、矩形、椭圆、多边形等基本图形,还可以显示、拷贝位图,却不必关心设备上下文等GDI概念,极大地方便了用户。Tcanvas对象本身并不是一个构件,不单独使用,它总是作为其它对象的属性
来使用的。Delphi有四个对象具有画布属性,它们是TForm、TImage、TPaintbox和Tbitmap,其中前三者是可视化构件。至于Tcanvas的详细情况,可以参考Delphi的联机帮助。
  实现简单的位图显示特技,实际上就是以不同的方式逐渐将源位图拷贝到Tcanvas类型的对象上,如从位图的中央开始拷贝一个矩形区域到屏幕中央,矩形区域不断扩大直到拷贝整个位图,其视觉效果就是位图从屏幕中央向四周扩散。不同的拷贝方式就形成了多种特技形式,如扩散、拉动和百叶窗等。对于每种特技形式灵活运用,又可演变出多种花样,如扩散可以演变为从上向下、从左向右、从中间向四周和相反方向的扩散,以及从一角向对角方
向扩散的特技花样。
  实现上述位图显示特技的原理很简单,关键是怎样实现位图的拷贝。在Delphi中有两种拷贝位图的方法,相应地就有两种实现位图显示特技的方法,一种是用Tcanvas对象的方法CopyRect,另一种是调用WindowsAPI的BitBlt函数。下面就以两种特技的实现为例分别介绍这两种方法。
   二、方法之一:调用CopyRect
  Tcanvas对象与拷贝位图有关的是CopyMode属性和CopyRect方法,其中CopyMode定义拷贝的模式,而CopyRect执行位图拷贝的操作。当CopyMode定义为缺省值cmSrcCopy时,CopyRect将源画布上的一部分位图拷贝到目标画布上的一个矩形区域内。CopyRect的过程声明及参数意义如下:
  procedureCopyRect(Dest:TRect;Canvas:TCanvas;Source:TRect);
  Dest目标画布上的矩形区域
  Canvas源画布
  Source源画布上的矩形区域
  下面以一个拉动特技的实现为例,说明如何用CopyRect方法实现特技。该例包括三个构件:Tform1、Teditl和Tbuttonl,变量step控制拉动的步骤。程序运行后,从Teditl中输入待显示位图文件名,然后单击Tbuttonl,这时位图从左侧出现并逐渐向右侧移动,好似位图被从左向右拉动一样,拉动结束后位图左上角坐标为(x0,y0)。该例程序清单如下所示:

  procedureTForml.ButtonlClick(Sender:TObject);
  const step=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);
  with rect1 do
  begin
  left:=bitmap.width-midx;
  top:=0;
  right:=bitmap.width;
  bottom:=bitmap.height;
  end;
  with rect2 do
  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中如何调用WindowsAPI。每当生成一个新的项目时,Delphi自动地把WinType和WinProcs单元名添加到所生成单元文件中的uses子句中,这两个单元包含了Delphi调用WindowsAPI所必须的类型定义和例程声明。这样,只需使用正确的参数就可以直接调用WindowsAPI,而不需要再作其它任何声明。
  BitBlt及类似的StretchBlt函数是Windows功能强大的图形处理函数,它的功能与TCanvas的CopyRect函数一样,不仅能够将位图或位图的一部分从一处拷贝到另一处,它还可以根据256个不同的光栅操作码将三幅位图结合起来,从而呈现不同的视觉效果。在WindowsAPI函数中,所有的blt函数的鼻祖都是BitBlt函数。在Delphi中BitBlt函数声明及参数意义如下:
  functionBitBlt(DestDC:HDC;X,Y,nWidth,Height:Integer;SrcDC;HDC;Src,
YSRC:Ingeger;Rop:LongInt):Bool;
  DestDC源设备上下文句柄
  X,Y源矩形左上角坐标
  nWidth,Height目标矩形的宽度和高度
  SrcDC目标矩形句柄
  XSrc,TSrc源位图矩形左上角坐

[1] [2] 下一页  

文章录入:enadd    责任编辑:enadd 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • 在多媒体文件中批量抓取图象

  • 使用DELPHI实现文本文件显示…

  • 在Delphi中使用DirectX

  • 用Delphi进行OpenGL编程学习…

  • 实现图象局部放大的原理和方…

  • 如何将Wav文件做到EXE文件里

  • 改变图片效果

  • DELPHI显示JPEG图像文件

  • Delphi中对Jpeg格式文件的处…

  • 基于Delphi的图像漫游

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |