delphi用CANVAS实现特技显示

时间:2010-01-28 08:41:07  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:程序先用随机函数产生每页的行数,作为每页高度,然后从顶端开始以lines作为增量,将源图的数据显示在目的图的显示区域,依次循环便形成了从上至下的百页窗效果,源图尺寸越大,效果越明显。//水平
  正文:由于Delphi 直接封装了Windows API ,而CANVAS又封装了Windows的设备环境,因此在Delphi中可以直接调用BitBlt等API函数进行图形图像的显示。BitBlt函数能将源设备中的矩形区域按指定操作模式复制到目的设备相应的矩形区域中。

   下面的程序先用随机函数产生每页的行数,作为每页高度,然后从顶端开始以lines作为增量,将源图的数据显示在目的图的显示区域,依次循环便形成了从上至下的百页窗效果,源图尺寸越大,效果越明显。


//水平

procedure TForm1.Button1Click(Sender: TObject);
var
i, j, lines, h, w: integer;
pdest, photoshop/ target=_blank class=infotextkey>psour: hbitmap;
begin
  psour := image1.canvas.handle; {源图句柄}
  pdest := image2.canvas.handle; {目的图句柄}
  h := image1.picture.Height;
  w := image1.picture.width;
  image2.canvas.FillRect(rect(0, 0, w, h)); {先将目的图清空}
  randomize;
  lines := 3 + random(10);
  for i := 0 to lines - 1 do
  begin
    j := i;
    while (j <= h) do
    begin
      bitblt(pdest, 0, j, w, i, psour, 0, j, srccopy);
      j := j + lines;
      image2.refresh;
    end;
  end;
end;

//垂直

procedure TForm1.Button2Click(Sender: TObject);
var
i, j, lines, h, w: integer;
pdest, psour: hbitmap;
begin
  psour := image1.canvas.handle; {源图句柄}
  pdest := image2.canvas.handle; {目的图句柄}
  h := image1.picture.Height;
  w := image1.picture.width;
  image2.canvas.FillRect(rect(0, 0, w, h)); {先将目的图清空}
  randomize;
  lines := 3 + random(10);
  for i := 0 to lines - 1 do
  begin
    j := i;
    while (j <= w) do
    begin
      bitblt(pdest, j, 0, i, H, psour, j, 0, srccopy);
      j := j + lines;
      image2.refresh;
    end;
  end;
  
end;

//从下往上

1.推拉效果

   将要显示的图形由上、下、左、右方向拉进屏幕内显示,同时将屏幕上原来的旧图盖掉,此种效果可分为四种,上拉、下拉、左拉、右拉,但原理都差不多,以上拉 效果为例。

   原理:首先将放在暂存图形的第一条水平线,搬移至要显示的位图的最后一条,接着再将暂存图形的前两条水平线,依序搬移至要显示位图的最后两条水平线,然后搬移前三条、前四条叄?直到全部图形数据搬完为止。在搬移的过程中即可看到显示的位图由下而上浮起,而达到上拉的效果。


procedure TForm1.Button3Click(Sender: TObject);
var
newbmp: tbitmap;
i, bmpheight, bmpwidth:integer;
begin
  Image2.Width := image1.Width;
  Image2.Height := image1.Height;
  bmpheight:=image1.height;
  bmpwidth:=image1.width;
  image2.canvas.FillRect(rect(0, 0, bmpheight, bmpwidth));
  for i:=0 to bmpheight do
  begin
    bitblt(Image2.Canvas.Handle, 0, bmpheight - i, bmpwidth, bmpheight,                  Image1.Canvas.Handle, 0, 0, srccopy);
    sleep(50);
    //newbmp.canvas.copyrect(rect(0, bmpheight - i, bmpwidth, bmpheight), image1.canvas, rect(0,0,  //    bmpwidth, i));

delphi用CANVAS实现特技显示》由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Language/Delphi/12546.html


关键字:

关于《delphi用CANVAS实现特技显示》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td