Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Flackernder Fade-Effect (https://www.delphipraxis.net/96514-flackernder-fade-effect.html)

Flo.Hoe 25. Jul 2007 22:59


Flackernder Fade-Effect
 
Hi,
Zum einblenden einer Form im Vollbildmodus lege ich zuerst eine schwarz gestrichene Form über sie und lasse sie(die schwarze Form) dann nach und nach durchsichtig werden.
Dafür benutze ich folgende Prozedur:

Delphi-Quellcode:

Procedure TDecke.FadeIn;
var i:Byte;
begin
  for I := 25 downto 0 do begin
      AlphaBlendValue:=round(i*10.2);
      Zeit.delay(10);

  end;
end;
Leider flackert dieser Vorgang ungemein. Es bilden sich Streifen mit leicht unterschiedlicher Farbabstufung.
Außerdem scheint die Berechnung sehr hohe Systemanforderungen zu stellen. So dauert es bei meinem Rechner (1 GHz) eine ganze statt einer viertel Sekunde.
Ich würde mich freuen, wenn mir jemand Helfen könnte.

PiQ 25. Jul 2007 23:05

Re: Flackernder Fade-Effect
 
also ich machs so

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  form1.AlphaBlendValue := form1.AlphaBlendValue - 1;
  if form1.AlphaBlendValue = 10
    then
      begin
        timer1.Enabled := false;
        form2.show;
        form1.hide;
      end;
  end;
isses das was du meinst :?: :wink:

Flo.Hoe 25. Jul 2007 23:56

Re: Flackernder Fade-Effect
 
Es bleibt dabei wenn ich die Transparenz langsam verändere (-1), dann bleibt es ruckelfrei, ist aber dafür extrem langsam. Bei - 10 Entstehen die Streifen.
Gibt es denn keine schnelle saubere Variante,eine Form "ein-zu-Faden"?

skyobserver 1. Aug 2007 12:38

Re: Flackernder Fade-Effect
 
Benutze den Tipp von PiQ (damit läuft es auf unterschiedlich starken "Maschinen" gleich schnell)
und füge in deinem Form im Ereignis "OnCreate" die Zeile "DoubleBuffered := True" ein.
Damit werden Änderungen an deinem Form mit dem Aufbau eines neuen Bildes am Monitor synchronisiert!

Flo.Hoe 3. Aug 2007 00:06

Re: Flackernder Fade-Effect
 
Die Streifen bleiben und die Berechnung scheint immer noch zu kompliziert zu sein.
Warum muss es eigentlich eine ganze schwarze Form sein die über eine andere gelegt wird. Ich vermute einfach das die Versuche bisher nur so eine Art Notlösung sind. Es muss einfacher gehen. Zum Beispiel gibt es ältere Adventure, die solche Effekte auf damaligen Rechnern gezaubert haben(ganz streifenlos und in Windes Eile).

xaromz 3. Aug 2007 00:45

Re: Flackernder Fade-Effect
 
Hallo,

alte Spiele (ich vermute Du meinst DOS-Spiele) hatten eine geringe Auflösung und wenig Farben. Außerdem hatten sie komplette Kontrolle über den Rechner. Die einzige Möglichkeit unter Windows, diese Art der Kontrolle zu erlangen, heißt DirectX bzw. OpenGl. Mit dem GDI hast Du schlechte Karten. Du musst bedenken, die Philosophie hinter GDI ist "einfach und kompatibel, dafür langsam".

Gruß
xaromz

skyobserver 3. Aug 2007 21:43

Re: Flackernder Fade-Effect
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe das mal ausprobiert und bekomme auch Streifen wenn ich den AlphaBlend-Wert
mit Schrittweiten größer 5 setze und den Timer-Wert kleiner setze damit nicht so
viel Bilder pro Sekunde berechnet werden müssen.


Ich habe meinen Lösungsvorschlag mal angehängt.
Es wird besser wenn man die größe des Fensters reduziert...


Aber ich fürchte xaromz hat recht: Die alten DOS-Spiele haben
bei ca. 320x240 Bildpunkten direkt in den Speicher der Grafikkarte
geschrieben und dabei massiv Assembler-Code eingesetzt. Damit sind
Geschwindigkeiten möglich von denen jede Hochsprache nur träumen
kann.

Einen Ausweg bieten da wirklich nur die Grafik-Schnittstellen.
Dummerweise muß man in DirectX oder OpenGL deutlich mehr Aufwand
treiben als ein simples "AlphaBlendValue := x"...

Die Windows-GDI-Bordmittel taugen nur für den Zweck eine konstante
Transparenz zu erzeugen aber nicht für einen fließenden Effekt.
Da sind einfach zu viele Schichten, Prüfungen und Treiber die
vielen verschiedenen Anforderungen gleich gerecht werden müssen
und nicht nur auf einen einzigen Zweck hin ausgerichtet bzw.
optimiert sind.

OregonGhost 3. Aug 2007 21:50

Re: Flackernder Fade-Effect
 
Alte DOS-Spiele hatten noch einen anderen Trick, sie hatten nämlich in vielen Fällen nur 256 Farben, d.h. eine Palette. Paletten haben ganz viele Nachteile - aber man kann sie prima für allerlei Effekte manipulieren. Man muss quasi nur 256 Einträge von je 2-3 Byte pro Frame bearbeiten, also maximal 768 Byte, statt 320x240. Da kann man also die Palette "ein-faden" statt des Bildes.

Edit: Im Vollbildmodus braucht man doch gar keine Forms. Ab Vista ist dein hausgebackener Einblendeffekt ohnehin hinfällig, und davon abgesehen hast du im Vollbildmodus doch die volle Kontrolle über die Zeichnung. Und da kannst du auch mit der GDI oder von Hand ganz schön schnell alphablenden.

bitsetter 3. Aug 2007 22:04

Re: Flackernder Fade-Effect
 
Zitat:

Zitat von skyobserver
Ich habe meinen Lösungsvorschlag mal angehängt.
Es wird besser wenn man die größe des Fensters reduziert...

Hi,

so wie du das gemacht hast, sieht es bei mir ähnlich aus wie
Delphi-Quellcode:
AnimateWindow(self.Handle, 2000, AW_BLEND);

skyobserver 3. Aug 2007 22:23

Re: Flackernder Fade-Effect
 
@bitsetter: Wo kommt denn "AnimateWindow" her? (finde ich nicht in meiner Delhi/Windows-OH...)

@OregonGhost: Was meinst Du mit "voller Kontrolle" im Vollbildmodus?


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:04 Uhr.
Seite 1 von 2  1 2      

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