用delphi怎么实现象网上许多javaaplet中图片的水中倒影效果?(50分)

  • 主题发起人 主题发起人 could
  • 开始时间 开始时间
我的想法 : 首先进行垂直镜像,然后对镜像的图像进行波浪化处理。
 
怎么处理波浪呢?我曾经试过几种想法,但效果都不理想。
 
波纹:

procedure TMainForm.WaveWrap(XDIV,YDIV,RatioVal:Integer);
var
Tmp,bmp: Tbitmap;
i,j,XSrc,YSrc: Integer;
begin
if(YDiv=0)or(XDiv=0)then
Exit;
Tmp:=Tbitmap.create;
bmp:=Tbitmap.Create;
bmp.Assign(backbmp);
tmp.assign(backbmp);

for i:=0 to tmp.Width-1 do

for j:=0 to tmp.Height-1 do
begin
XSrc:=Round(i+RatioVal*Sin(j/YDiv));
YSrc:=Round(j+RatioVal*sin(i/XDiv));

if XSrc<0 then
XSrc:=Width-1-(-XSrc mod Width)
else if XSrc>=Width then
XSrc:=XSrc mod Width;
if YSrc<0 then
YSrc:=Height-1-(-YSrc mod Height)
else if YSrc>=Height then
YSrc:=YSrc mod(Height-1);

bmp.Canvas.Pixels[i,j]:=Tmp.Canvas.Pixels[XSrc,YSrc];
// end;
end;
childFORM.Image1.Picture.Assign(bmp);
bmp.Free;
Tmp.Free;
end;
 
huazai的算法实现了波纹,
怎样才能让波纹动起来呢?
欢迎大家继续讨论
 
加个定时器,不断改变WaveWrap(XDIV,YDIV,RatioVal:Integer);的参数,
就可以了。
 
后退
顶部