Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Image fade in? (https://www.delphipraxis.net/58934-image-fade.html)

Jonas 14. Dez 2005 18:52


Image fade in?
 
Hi....das man eine Form mit Alphablend und Timer einblenden lassen kann ist ja bekannt....hab mich etwas im internet durch gesucht und wollte das gleiche mit einem geladenen image machen....hab jedoch keine lösung gefunden....was ich gefunden hab sind wege wie man ein image zwar einfaden lassen kann, jedoch wird das image dann erst geladen also von außen....drumm wollt ich fragen wie man ein image was mit Timage halt auf meiner form liegt in einer bestimmten zeit einfaden lassen kann?

Der_Unwissende 14. Dez 2005 19:38

Re: Image fade in?
 
Zitat:

Zitat von Jonas
was ich gefunden hab sind wege wie man ein image zwar einfaden lassen kann, jedoch wird das image dann erst geladen also von außen....drumm wollt ich fragen wie man ein image was mit Timage halt auf meiner form liegt in einer bestimmten zeit einfaden lassen kann?

Hi,
was meinst du denn genau? Ich meine hier insbesondere was du unter "dann erst geladen von außen" verstehst. Du solltest das Image natürlich mindestens einmal laden. Dann suchst du einfach mal nach Transparenz und Bitmap und das wendest du auf das geladene Bitmap an. Mittels eines Timers senkst du die Transparenz immer weiter ab und mit z.B. BitBlt kannst du die veränderte Bitmap immer wieder zeichnen (im OnTimer-Ereignis).

Gruß Der Unwissende

Jonas 14. Dez 2005 19:50

Re: Image fade in?
 
Delphi-Quellcode:
procedure FadeIn(ImageFileName: TFileName);
var
  Bitmap, BaseBitmap: TBitmap;
  Row, BaseRow: PRGBTripleArray;
  x, y, step: integer;
begin
  // Bitmaps vorbereiten / Preparing the Bitmap //
  Bitmap := TBitmap.Create;
  try
    Bitmap.PixelFormat := pf32bit; // oder pf24bit / or pf24bit //
    Bitmap.LoadFromFile(ImageFileName);
    BaseBitmap := TBitmap.Create;
    try
      BaseBitmap.PixelFormat := pf32bit;
      BaseBitmap.Assign(Bitmap);
      // Fading //
      for step := 0 to 32 do
      begin
        for y := 0 to (Bitmap.Height - 1) do
        begin
          BaseRow := BaseBitmap.Scanline[y];
          // Farben vom Endbild holen / Getting colors from final image //
          Row := Bitmap.Scanline[y];
          // Farben vom aktuellen Bild / Colors from the image as it is now //
          for x := 0 to (Bitmap.Width - 1) do
          begin
            Row[x].rgbtRed := (step * BaseRow[x].rgbtRed) shr 5;
            Row[x].rgbtGreen := (step * BaseRow[x].rgbtGreen) shr 5; // Fading //
            Row[x].rgbtBlue := (step * BaseRow[x].rgbtBlue) shr 5;
          end;
        end;
        Form1.Canvas.Draw(0, 0, Bitmap);  // neues Bild ausgeben / Output new image //
        InvalidateRect(Form1.Handle, nil, False);
        // Fenster neu zeichnen / Redraw window //
        RedrawWindow(Form1.Handle, nil, 0, RDW_UPDATENOW);
      end;
    finally
      BaseBitmap.Free;
    end;
  finally
    Bitmap.Free;
  end;
end;
Quelle

Das mein ich damit. Aber ich habe ja mein image bereits in meiner Anwendung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz