ايران ويج

نسخه‌ی کامل: موج دادن عکس
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام.

من دنبال یک کد هستم که وقتی ماوس رفت روی عکس بصورت آب مواج درباید و قتی ماوس رو کنار بردیم به حالت اول برگرده.

ممنونم
سلام عزیزم این کار که میگی از طریق کد نویس میشه که تو پیکسلها رو بخونی و روشون مانور کنی چون کارش زیاده میتونی از راهکارهای دیگری چون فراخواندن یک acript از اون استفاده کنی. حتی میتونی از توابعش هم استفاده کنی
یه کم دیره(پستو تازه دیدم)

میتونین از یونیت زیر استفاده کنین برای این افکت

کد:
unit blobs;

{ ------------------------------------------------------------------------- }
  interface
{ ------------------------------------------------------------------------- }

uses
  graphics, windows;

type
  PScanLine = ^TScanLine;
  TScanLine = array[0..65535] of byte;
  TBlobs = class
    private
      fFrame    : cardinal;
      fDrawing  : boolean;
      fBlobs    : array[0..5] of TPoint;
      fBitmap   : graphics.TBitmap;
      fXOfs     : integer;
      fYOfs     : integer;
      fXSeed    : integer;
      fYSeed    : integer;
      fSize     : integer;
      procedure SetupBlobs;
    public
      constructor Create( ABitmap : graphics.TBitmap; ASize : integer );
      procedure   Animate;
  end;

{ ------------------------------------------------------------------------- }
  implementation
{ ------------------------------------------------------------------------- }

constructor TBlobs.Create( ABitmap : graphics.TBitmap; ASize : integer );
begin
  fBitmap := ABitmap;
  fFrame := 0;
  fSize := ASize;
  fDrawing := FALSE;
  fXOfs := fBitmap.Width div 2;
  fYOfs := fBitmap.Height div 2;
  fXSeed := fXOfs - 10;
  fYSeed := fYOfs - 10;
  SetupBlobs;
end;

{ ------------------------------------------------------------------------- }
procedure TBlobs.SetupBlobs;
var
  i : integer;
  pal  : PLogPalette;
  hpal : HPALETTE;
begin
  fBitmap.PixelFormat := pf8bit;
  pal := nil;
  try
    GetMem( pal, sizeof( TLogPalette ) + sizeof(TPaletteEntry) * 255 );
    pal.palVersion := $300;
    pal.palNumEntries := 256;
    for i := 0 to 255 do
    begin
      pal.palPalEntry[i].peRed   := 255-i;
      pal.palPalEntry[i].peGreen := 255-i;
      pal.palPalEntry[i].peBlue  := 128-i;
      pal.palPalEntry[i].peFlags := PC_RESERVED;
    end;
    hpal := CreatePalette( pal^ );
    if hpal <> 0 then
      fBitmap.Palette := hpal;
  finally
    FreeMem( pal );
  end;
end;

{ ------------------------------------------------------------------------- }
procedure TBlobs.Animate;
var
  x, y, i : integer;
  Value, t : integer;
  Scan : PScanLine;
begin
  inc(fFrame);
  if fDrawing = FALSE then
  begin
    fBlobs[0].x := fXOfs + round( fXSeed * SIN( (2 * fFrame) *
                                  0.01745329252222 ) );
    fBlobs[0].y := fYOfs + round( fYSeed * SIN( (4 * fFrame) *
                                  0.01745329252222 ) );
    fBlobs[1].x := fXOfs + round( fXSeed * SIN( (6 * fFrame) *
                                  0.01745329252222 ) );
    fBlobs[1].y := fYOfs + round( fYSeed * SIN( (3 * fFrame) *
                                  0.01745329252222 ) );
    fBlobs[2].x := fXOfs + round( fXSeed * SIN( (7 * fFrame) *
                                  0.01745329252222 ) );
    fBlobs[2].y := fYOfs + round( fYSeed * SIN( (5 * fFrame) *
                                  0.01745329252222 ) );
    fBlobs[3].x := fXOfs + round( fXSeed * SIN( (3 * fFrame) *
                                  0.01745329252222 ) );
    fBlobs[3].y := fYOfs + round( fYSeed * SIN( (2 * fFrame) *
                                  0.01745329252222 ) );
    fBlobs[4].x := fXOfs + round( fXSeed * SIN( (4 * fFrame) *
                                  0.01745329252222 ) );
    fBlobs[4].y := fYOfs + round( fYSeed * SIN( (2 * fFrame) *
                                  0.01745329252222 ) );
    fBlobs[5].x := fXOfs + round( fXSeed * SIN( (2 * fFrame) *
                                  0.01745329252222 ) );
    fBlobs[5].y := fYOfs + round( fYSeed * SIN( (3 * fFrame) *
                                  0.01745329252222 ) );
    fDrawing := True;
    try
      For y := 0 to fBitmap.Height-1 do
      begin
        Scan := PScanLine( fBitmap.ScanLine[y] );
        for x := 0 to fBitmap.Width-1 do
        begin
          t := 0;
          For i := 0 to 5 do
          begin
            value := ( fBlobs[i].x - x ) * ( fBlobs[i].x - x );
            value := value + ( fBlobs[i].y - y ) * ( fBlobs[i].y - y );
            if value < 1 then
              value := 1;
            t := t + ( fSize div value );
          end;
          t := 255 - t;
          if t < 0 then
            t := 0;
          Scan[x] := t;
        end;
      end;
    except
    end;
    fDrawing := false;
  end;
end;


end.