Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Bild-/Imagewechsel flackerfrei darstellen (https://www.delphipraxis.net/106205-bild-imagewechsel-flackerfrei-darstellen.html)

norwegen60 7. Jan 2008 09:47


Bild-/Imagewechsel flackerfrei darstellen
 
Hallo zusammen,

ich überarbeite derzeit meine Bilderverwaltung und möchte jetzt zusätzlich die Bilder in einer Diashow bildschirmfüllend darstellen. Dabei stört jedoch erheblich, dass bei einem Bildwechsel für ein paar Zehntelsekunden auf den grauen Hintergrund des Formulars geschalten wird. Nach einfügen von

Delphi-Quellcode:
  foImage.DoubleBuffered:=true; // Verhindert grauen Bildschirm (flackern) zwischen zwei Bildern
ist das flackern zwar weg, dafür wird in einem Panel, in dem Name und Datum des Bildes dargestellt werden, der alte Text nicht gelöscht, sondern immer wieder überschrieben, so dass irgendwann nur noch ein schwarzer Fleck da ist.

Ich habe auch überlegt, mit zwei Images zu arbeiten, eins davon auf not Visible zu setzen, mit LoadFromFile zu beladen und danach das andere auf not Visible zu setzen und das neu beladen auf visible. Genutzt hat das aber nichts, da der LoadFromFile-Prozess wohl im Hintergrund fertiggestellt wird. Komischerweise hat aber auch eine Zwangspause nicht weitergeholfen. Eine Eigenschaft, anhand der ich feststellen kann, ob das Laden fertig ist, habe ich nicht gefunden

Delphi-Quellcode:
    if Image1.visible then
      Image2.Picture.LoadFromFile(sFile)
    else
      Image1.Picture.LoadFromFile(sFile);

    uHilfs1.SetStart;
    repeat
      application.ProcessMessages;       // Prozesszeit freigeben
    until uHilfs1.GetStart>0.5            // 0.5 Sekunden warten  

    Image1.Visible:=not Image1.Visible;
    Image2.Visible:=not Image1.Visible;
abläuft.

Wer hat Ideen, wie die flackerfreie Darstellung realisiert werden kann.

Vielen Dank
Gerd

Codewalker 7. Jan 2008 11:58

Re: Bild-/Imagewechsel flackerfrei darstellen
 
Ich empfehle Dir dafür mal Andorra2D anzuschauen. Das ist eine 2D-Engine mit Hardwarebeschleunigung, zu der du hier im Forum sicher einiges finden wirst.

Hador 7. Jan 2008 13:25

Re: Bild-/Imagewechsel flackerfrei darstellen
 
Zitat:

Zitat von Codewalker
Ich empfehle Dir dafür mal Andorra2D anzuschauen. Das ist eine 2D-Engine mit Hardwarebeschleunigung, zu der du hier im Forum sicher einiges finden wirst.

Du willst für eine Diashow einfache mit einfachem Bildwechsel eine extra Grafikengine einsetzen? Das nenne ich mal mit Kanonen auf Spatzen schießen.

Also ich habe bei meinem Bildbetrachter auch einfach DoubleBuffered eingeschaltet. So ein Problem wie du es it dem label hast, habe ich nicht. Ich habe auch bisher noch nie von einem solchem Problem gehört.

SirThornberry 7. Jan 2008 13:44

Re: Bild-/Imagewechsel flackerfrei darstellen
 
Das Problem ist die Verwendung von TImage. Dieses zeichnet sich auf die Canvas des Parents und sobald sich das Bild ändert muss das Elternelement mit allem was drauf ist neu gezeichnet werden. Wenn du keine Alphatransparenz benötigst verwende eine Komponente mit eigener Canvas.

Was hat die Frage eigentlich mit Datenbanken zu tun? In welcher Art und Weise beeinflussen die dein Vorhaben bzw. das was passiert aber nicht passieren soll?

norwegen60 7. Jan 2008 14:20

Re: Bild-/Imagewechsel flackerfrei darstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von SirThornberry
Das Problem ist die Verwendung von TImage. Dieses zeichnet sich auf die Canvas des Parents und sobald sich das Bild ändert muss das Elternelement mit allem was drauf ist neu gezeichnet werden. Wenn du keine Alphatransparenz benötigst verwende eine Komponente mit eigener Canvas.

Das habe ich festgestellt. Wenn ich den Text per TDBText ausgebe, wird er immer wieder überschrieben und schwarz, wenn ich ihn in einem TDBEdit-Feld ausgebe, wird er korrekt dargestellt. Allerdings gibt es in dem TPanel nach "foImage.DoubleBuffered:=true;" auch sonst noch ein paar unschöne Effekte. So bleiben Teile des alten Hintergrunds stehen. (s. beiliegendes Bild). Gibt es sonst noch Möglichkeiten?

Zitat:

Zitat von SirThornberry
Was hat die Frage eigentlich mit Datenbanken zu tun? In welcher Art und Weise beeinflussen die dein Vorhaben bzw. das was passiert aber nicht passieren soll?

Eigentlich gar nichts, aber als ich die Frage Absenden wollte, reklamierte die Seite, dass ich noch keine Datenbank und keine Zugriffsart festgelegt habe und so habe ich sie halt ausgefüllt

Muetze1 7. Jan 2008 15:05

Re: Bild-/Imagewechsel flackerfrei darstellen
 
Zitat:

Zitat von norwegen60
Eigentlich gar nichts, aber als ich die Frage Absenden wollte, reklamierte die Seite, dass ich noch keine Datenbank und keine Zugriffsart festgelegt habe und so habe ich sie halt ausgefüllt

Liegt vielleicht daran, dass die Frage in dem Unterforum "Datenbanken" erstellt wurde?

Zur Frage: Nutze TPaintBox oder leite dir eine eigene Komponente z.B. von TGraphicControl ab.

DP-Maintenance 7. Jan 2008 15:06

DP-Maintenance
 
Dieses Thema wurde von "SirThornberry" von "Datenbanken" nach "VCL / WinForms / Controls" verschoben.

Codewalker 7. Jan 2008 18:22

Re: Bild-/Imagewechsel flackerfrei darstellen
 
Zitat:

Zitat von Hador
Zitat:

Zitat von Codewalker
Ich empfehle Dir dafür mal Andorra2D anzuschauen. Das ist eine 2D-Engine mit Hardwarebeschleunigung, zu der du hier im Forum sicher einiges finden wirst.

Du willst für eine Diashow einfache mit einfachem Bildwechsel eine extra Grafikengine einsetzen? Das nenne ich mal mit Kanonen auf Spatzen schießen.

Also ich habe bei meinem Bildbetrachter auch einfach DoubleBuffered eingeschaltet. So ein Problem wie du es it dem label hast, habe ich nicht. Ich habe auch bisher noch nie von einem solchem Problem gehört.

Naja, sobald Bewegung und Überblenden reinkommt, ist der Canvas sicherlich mit der Leistung am Ende. Gerade was das Anzeigen von Bildern von Digitalkameras im Megapixelbereich angeht. Und das was er umsetzen will kostet in Andorra vielleicht ~60 Zeilen und gut ist ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:43 Uhr.

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