http://202.112.105.179/delphi/graphic/PICSHOW.zipn种特效,有完整代码!

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Buttons, ExtCtrls;type
      TForm1 = class(TForm)
        Image1: TImage;
        BitBtn1: TBitBtn;
        Label1: TLabel;
        Edit1: TEdit;
        procedure BitBtn1Click(Sender: TObject);  private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      i,j,idivrect,isrc,jsrc,width,height,feg:integer;
      srcrect,desrect:trect;begin
      form1.Canvas.CopyMode:=cmsrccopy;//马赛克效果
      idivrect:=100;
      width:=image1.Width;
      height:=image1.Height;
      randomize;
      for i:=1 to 500*idivrect do
      begin
        isrc:=random(idivrect);
        jsrc:=random(idivrect);
        srcrect:=rect(isrc*width div idivrect,jsrc*height div idivrect,(isrc+1)*width div idivrect,(jsrc+1)*height div idivrect);
        desrect.Top:=srcrect.Top+image1.Top;
        desrect.Left:=srcrect.Left+image1.Left;
        desrect.Right:=srcrect.Right+image1.Left;
        desrect.Bottom:=srcrect.Bottom+image1.Top;
        with form1.Canvas do
        begin      copyrect(desrect,image1.canvas,srcrect);
        end;  end;
      srcrect:=rect(0,0,width,height);
      desrect.Top:=srcrect.Top+image1.Top;
      desrect.Left:=srcrect.Left+image1.Left;
      desrect.Right:=srcrect.Right+image1.Left;
      desrect.Bottom:=srcrect.Bottom+image1.Top;
      with form1.Canvas do
        begin      copyrect(desrect,image1.canvas,srcrect);
        end;
      image1.Visible:=true;//以下是百叶窗效果
      idivrect:=20;
      feg:=(image1.Height div idivrect);
      edit1.Text:=inttostr(feg);
      image1.Canvas.CopyMode:=cmwhiteness;
      for j:=1 to feg do
        for i:=1 to idivrect do
        begin
          srcrect:=rect(image1.Left,image1.Top+i*feg-j-1,image1.Left+image1.Width,image1.Top+i*feg-j);
          desrect.Top:=srcrect.Top-image1.Top;
          desrect.Left:=0;
          desrect.Right:=image1.Width;
          desrect.Bottom:=srcrect.Bottom-image1.Top;
          with image1.Canvas do
            begin
            copyrect(desrect,form1.canvas,srcrect);
            image1.Refresh;
            end;
      end;
    end;end.
    这里一开始,将image1的visible属性设为false,上面的程序只是阐述实现原理与算法,具体转场看你的应用了,可以是两个image, 其中一个的visible为false,两个image之间进行转场