//-------------------------------------------------------------------------
// Plasma routine, using the surface of a TImage.
// made in delphi 4.0
//
// Written by Richard Funke <Richard.Funke@interkodex.no> (c) 1999
// www.interkodex.com
// have fun!
//
// Code from Delphi Snippets : http://sortland.net/Delphi/Snippets.htm
//-------------------------------------------------------------------------
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure PlasmaLoop(Sender: TObject; var Done: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

var
  x1, X2, x3: Byte;
  sctable: array[0..255] of Byte;



procedure TForm1.PlasmaLoop(Sender: TObject; var Done: Boolean);
type
  dings = array[0..1] of Integer;
var
  xx, yy: Integer;
  sline: ^dings;
  d1, d2, d3: Byte;
begin
  for yy := 0 to image1.Height - 1 do
    begin
      sline := image1.Picture.BitMap.scanline[yy];
      for xx := 0 to image1.Width - 1 do
        begin
          d1 := xx shr 1 + x1;
          d2 := yy shr 2 + X2;
          d3 := xx shr 1 + yy shr 3 + x3;
          sline[xx] := rgb(sctable[d1], sctable[d2], sctable[d3]);
        end;
    end;
  Inc(x1);
  Inc(X2, 2);
  Inc(x3, 3);
  Done := False;
  image1.Refresh;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to 255 do
    sctable[i] := Round(sin(i / 128 * 3.14) * 127 + 128);
  Application.OnIdle := plasmaloop;
  image1.Picture.BitMap.PixelFormat := pf32bit;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  image1.Picture.BitMap.Width := image1.Width;
  image1.Picture.BitMap.Height := image1.Height;
end;

end.