![]() |
Kleines GIF Problem
Hallo!
Ich habe ein kleines GIF Problem, und hoffe Ihr könnt mir da weiterhelfen... Ich versuche gerade GIF-Animationen Frameweise als Bitmap zu speichern ( was auch klappt ). Dazu verwende ich TGIFImage und packe die Frames einfach in ein TBitmap wo ich dann speicher ( bitmap.Assign(GIF.Images[x]); ) Das Problem was ich habe ist nur bei den Gifs wo sich Bereiche ändern. Die Bilder werden zwar gespeichert, passen aber in der Größe nicht zu den anderen Grafiken. Da ich die gespeicherten Bitmaps aber wieder zu einer Animation zusammen setze hat die neue Animation dann bei diesen Gifs Fehler. Gibt es für die Gifs wo sich nur die Bereiche ändern vieleicht ne andere Möglichkeit die einzelnen Bilder zu speichern ? |
Re: Kleines GIF Problem
Das heißt, du hast GIFs wo sich bei denen nicht ganze Frames ändern, sondern wo sich nur Teile des Frames ändern oder wie kann ich das wo verstehen?
|
Re: Kleines GIF Problem
Liste der Anhänge anzeigen (Anzahl: 2)
Ja, es werden nur Bereiche pro Frame geändert und damit passt dann die neue Animation nicht mehr die ich später aus den Frames erstellen will.Ich hab mal so eine Gif + Ausgabe angehängt.
|
Re: Kleines GIF Problem
Die Lösung liegt doch eigentlich auf der Hand. Du nimmst ein Bitmap mit der Größe des GIFs. In ein zweites kopierts du den Frame aus dem GIF. Dann kopierst du das zweite Bitmap in das erste und speicherst das ab.
Eventuell kann man ein Bitmap auch nachträglich noch vergrößern oder es gibt noch ander Möglichkeiten, da ich nicht weiß, welche Möglichkeiten die von dir verwendeten Bibliotheken bieten. |
Re: Kleines GIF Problem
Habe ich versucht. Wenn ich das kopiere passen die Positionen nicht.
|
Re: Kleines GIF Problem
Hm, in dem PNG sieht es aber so aus, als wenn der Ursprung immer links oben wäre.
|
Re: Kleines GIF Problem
Bei Bild 7 und 8 von unten siehste das mit den Positionen. Denke das muss anders gehen, nur wie weiss ich nicht...
|
Re: Kleines GIF Problem
Es wäre evtl. nicht unwichtig zu wissen welches TGIFImage du benutzt. Bei
![]() |
Re: Kleines GIF Problem
Also ich verwende "GIFImg" im Quelltext steht "This source code is adapted from the original TGIFImage written by Anders Melander.".
Ich habe aber auch verschiedene Gifengines versucht. Immer das gleiche Ergebnis. Es klappt, aber sobald so ein "komisches" Gif kommt is vorbei... |
Re: Kleines GIF Problem
Riecht nach dem 6. Eintrag der Torry Kategorie die ich verlinkt habe. Von dort aus findet sich auch der
![]() Zitat:
Edit2: Heh, Left und Top greifen sogar auf genau das selbe private Feld der Klasse zu. Also kannst du wirklich problemlos das benutzen was dir optisch im Code besser gefällt =) So, oder so ähnlich hätte eine Recherche ausfallen können ;) |
Re: Kleines GIF Problem
Super:)
Wie kopiere ich denn dann den Bereich an die richtige Stelle im Bitmap? Hast du vieleicht ein Beispiel wie ich ein Gif umsetze ? |
Re: Kleines GIF Problem
Da TGIFSubImage das Frame sogar ganz komfortabel als TBitmap bereit stellt, kannst du es wie jedes andere einfach mittels TBitmap.Draw() in dein Zielbitmap zeichnen. Alternativ ginge auch BitBlt().
Edit: Die Klasse bietet sogar eine eigene Draw() Methode, so dass du nichtmal auf die Bitmap-Property zurückgreifen musst. Das Help-File ist echt spannend zu lesen :) |
Re: Kleines GIF Problem
Liste der Anhänge anzeigen (Anzahl: 1)
Also fast gut, aber irgendwas passt da immer noch nicht...
for x := 0 to Anzahl - 1 do begin sub:=GIF.Images[x]; bitmap.Canvas.Draw(sub.Left, sub.top,sub.Bitmap); .... |
Re: Kleines GIF Problem
In der Tat etwas kurios. Man könnte meinen, dass alle Sub-Frames die Änderung zum Frame 0 angeben, dem wiedersprechen aber die 2 Frames die nur die Augen beinhalten - diese würden mitten in der "Luft" landen, da der Smiley im Frame 0 an der Wand ist. Die selben Frames lassen die Vermutung, dass man alles rechts der Sub-Frames manuell schwarz zeichnen müsste auch nicht gelten (und es wäre eine recht blöde Sache, die wohl kaum einer in einen Standard nehmen würde :stupid:).
Schau mal nach ob TGIFSubImage nicht eine Property hat, die angeben könnte auf welches Frame es sich bezieht. Es muss scheinbar nicht zwangsweise immer das direkt vorhergehende sein, da die Klasse selbst schon eine Methode bietet Differenzframes zu frei gewählten anderen Frames zu erzeugen wie ich gestern beim Überfliegen gesehen habe. Dann müsstest du jedes Frame rekursiv über seine Referenzframes zusammenstückeln (geht auch iterativ, aber wäre wohl ein typischer Fall für Rekursion). |
Re: Kleines GIF Problem
Also ich habe jetzt alles durch und nix will klappen :(
|
Re: Kleines GIF Problem
Hat denn keiner bis jetzt so ein Problem gehabt, oder einen weg zu Lösung ? Ich fummel da jetzt schon Tagelang dran, aber egal was ich mache, immer das gleiche Problem :(
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:12 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