2007. december 28., péntek

Fade out a bitmap


Problem/Question/Abstract:

Fade out a bitmap

Answer:

Put a TImage and load a bitmap of 24 bits  or 32 bits, put a TButton on the form and this code in its OnClick event

procedure TForm1.Button1Click(Sender: TObject);
  procedure FadeOut(const BMP: TImage; Pause: integer);
  var
    BytesPorScan: integer;
    w, h: integer;
    p: pByteArray;
    counter: integer;
  begin
    { This only works with 24 or 32 bits bitmaps }

    if not (BMP.Picture.Bitmap.PixelFormat in [pf24Bit, pf32Bit]) then
      raise exception.create('Error, bitmap format not supported.');

    try
      BytesPorScan := Abs(Integer(BMP.Picture.Bitmap.ScanLine[1]) -
        Integer(BMP.Picture.Bitmap.ScanLine[0]));
    except
      raise exception.create('Error');
    end;

    { Decrease the RGB components of each single pixel }
    for counter := 1 to 256 do
    begin
      for h := 0 to BMP.Picture.Bitmap.Height - 1 do
      begin
        P := BMP.Picture.Bitmap.ScanLine[h];
        for w := 0 to BytesPorScan - 1 do
          if P^[w] > 0 then
            P^[w] := P^[w] - 1;
      end;
      Sleep(Pause);
      BMP.Refresh;
    end;
  end; {procedure FadeOut}

begin
  FadeOut(Image1, 5);
end;

Nincsenek megjegyzések:

Megjegyzés küldése