![]() |
AW: AnimatePNG
Zitat:
Zitat:
Geh mal davon aus dass es nicht an den anderen Playern liegt. Ich hab mich nicht groß mit APNG beschäftigt, aber das was ich bisher überflogen habe klingt eher nach einem Fehler auf deiner Seite. Die Standbilder sind für Programme/Browser die Animierte PNGs nicht unterstützen. Wenn du z.B. mit einem Browser abgesehen von Firefox auf die Wikipedia Seite von APNG gehst, siehst du ein Standbild. Mit Firefox ist das Beispielbild animiert. |
AW: AnimatePNG
Zitat:
gruss |
AW: AnimatePNG
:? :?
|
AW: AnimatePNG
Zitat:
Das sind keine Standbilder sondern das 1 Bild in der Animation weil diese Browser halt nicht mehr als 1 Frame lesen können. So einfach ist das . In dem Fall werden Animiert PNG als normale Bilddateien angesehen. Bei mir kann man aber ein Standbild von einer beliebiger Position im APNG anzeigen. gruss |
AW: AnimatePNG
CPU <> FPS..
Habe das Rendern jetzt beschleunigen können Bitmap 512X512 mit 120 Frames. 7% CPU bei einem Timer Interval von 30ms (abhängig von der FrameDimensionTime) bei 49FPS In Realzeit (1ms) sind es 25 aber mit 66FPS von daher spielt dann die Auslastung der CPU keine Rolle mehr wenn die Maximale Frameanzahl pro Sekunde erreicht wird ohne das die Animation ruckelt oder langsamer wird. EDIT: Habe es noch mehr steigern können das gleiche Bitmap in Realzeit 2 > 12% CPU 67FPS ![]() EDIT2: Nochmal optimiert sollte jetzt fertig sein. Siehe Pic Fast0. Das gleiche noch mit Gif dann war's das. gruss |
AW: AnimatePNG
Neue Version oben.
Was ich geändert habe steht auch dort. gruss |
AW: AnimatePNG
Leider ist das Programm in seiner dereitigen Version für mich unbenutzbar, es erscheint das berüchtigte: "AnimatePNG.exe hat ein Problem festgestellt und muss beendet werden."
Bei GifToAPNG.exe wäre eine Ausgabe ob der erfolgreichen /-losen Konvertierung günstig (gewesen). Daß erfolgreich konvertiert wurde, stellte ich erst beim Blick in das jeweilige Verzeichnis fest (die Ausgabe "...FrameCount=.." besagt das ja nicht). Zu meiner Verwunderung war die APNG zudem deutlich größer als die als Vorlage verwandte GIF, nämlich etwa doppelt so groß. Eigentlich sollte es doch andersherum sein. Meine Härtetest-Gifs (zu denen ich hier schon verlinkte) zu konvertieren schafft der Konverter leider nicht. |
AW: AnimatePNG
Zitat:
Zitat:
Quelltext ist dabei. Zitat:
Zudem wird eine Fehlermeldung ausgegeben, dürfte bei deiner Gif Win32Error sein. ![]() gruss |
AW: AnimatePNG
Zitat:
![]() Und selbst das ist noch nicht alles. Dazu hängt die Dateigröße auch noch davon ab, welche Heuristiken der Encoder beim Abspeichern verwendet hat. Da gibt es Tools wie OptiPNG ( ![]() Wie gesagt, die meisten Programme können sowas nicht. Wenn dann noch Animation dazu kommt, dann wird es wahrscheinlich noch schwieriger, ein Tool zu finden, das alles kann. |
AW: AnimatePNG
Zitat:
Ich möchte ja nicht nur die Bilder anzeigen sondern diese Ein\Ausblenden können ala.. .AlphaBlend und anderer Effekte. Eine komprimierte 256Farben PNG würde dabei nur hinderlich sein. Leider habe ich das mit dem AlphaBlend noch nicht hinbekommen es funktioniert irgendwie nicht warum da muss ich mich nochmal schlau machen. Aber wie gesagt ich werkle hier mit 120 Frames in Realzeit bei 0% CPU herum besser geht's nicht. War schon schwer genug ;) GidiPlus ist nicht die schnellste API da muss man tricksen. Zudem der Unterschied von 8it GIF / 32Bit PNG sollte einem die frage schon beantwortet haben warum APNG/PNG größer ist. gruss |
AW: AnimatePNG
Zitat:
Zitat:
An sich ein akzeptables Angebot, nur bezweifele ich, als Außenstehender das Problem in vertretbarer Zeit zu lösen. |
AW: AnimatePNG
Zitat:
user/deinname/appdata/roaming/BrewIdeas/AnimatePNG Zitat:
gruss |
AW: AnimatePNG
Zitat:
|
AW: AnimatePNG
So, das nächste Problemchen: Drücke ich auf den Beenden-Knopf und dann auf "no", friert das Programm ein.
Edit: Zumindest wird man diese Nachfrage nicht wieder los. Edit 2: Auch den Dialog, wenn man auf "APNG" klickt, wird man mit "no" nicht mehr los. |
AW: AnimatePNG
Zitat:
Wenn dem so ist/war da kann ich leider nichts tun. Das Programm wurde unter W7 entwickelt und manche Dinge die hier laufen müssen das nicht zwangsweise auch unter XP tun. Da muss nur eine Api fehlen oder wie unter W7 kein Aero vorhanden sein dann kann es zu Problemen kommen. Meine DLL ist nun mal auf Aero angewiesen das sagt der Name schon SK_Aero.dll SK = Skinengine AERO = DWM ist nötig. Es kann unter XP laufen aber Garantien zwecks CPU Auslastung .. Ausführung usw. gibt es kein. Es ist nicht das Programm es ist die Umgebung in der es läuft. Ok nochmal ein Pic mehr kann ich dazu nicht mehr sagen. (W7 ohne Aero) Nur eins noch: Alleine die Speicherverwaltung unter XP macht schon ärger die Animation im Shot 203 MB im Speicher kann von XP nicht gelesen werden. Es wird beim Abspielen nur das 1 Frame gerendert die anderen bleiben leer. Nein! Keine Sorge bei der nächsten Animation wird der Speicher korrekt freigegeben. gruss |
AW: AnimatePNG
Unter XP kannst du das Knicken. AERO gabs erst ab Vista (also eine Version später).
Man bekommts zwar teilweise zum laufen, aber wirklich sauber ist was anderes :) |
AW: AnimatePNG
Zitat:
Hier läuft es auch mit ausgeschalteten Aero. Ich habe ja XP auf der anderen Platte muss halt nur vom anderen Bootlaufwerk hochfahren und habe es dort getestet aber wie gesagt es läuft dort nicht. Weder mit der DLL Version noch das in der EXE implementierte. Habe APNG aus der EXE herausgenommen weil die Optimierung doch einiges an Zeit in Anspruch genommen hat. Es muss nicht jeder meine Tricks kennen. EDIT: Ich könnte auch die Auslastung der Gif Animationen auf 0% CPU bringen aber dann müsste ich auch diese aus der EXE herausnehmen. Daher denke ich, ist es besser ihr versucht euch selbst daran. Was ich nur sagen kann es geht definitiv. gruss |
AW: AnimatePNG
Neue Version..
Infos siehe oben. gruss |
AW: AnimatePNG
Also ich kann mir ein animiertes Gif ansehen, daß im Gif-Ordner liegt, aber die Konvertierung klappt nicht. Fehlermeldung:
--------------------------- GIFtoAPNG --------------------------- \\Mac\Home\Downloads\AnimatePNG(1)\AnimatePNG\imag es\Gif\nyzsQKk.pngFrame count =0 --------------------------- OK --------------------------- Das kleine Fensterchen "GifToAPNG" meldet Framecount=68, Value=68 und Status=Ok Dann hab ich dieses hier ( ![]() Achja: Immer noch Win10 Prof auf einem Mac via Parallels. Sherlock |
AW: AnimatePNG
Zitat:
Hmm komischer pfad "imag es" gruss |
AW: AnimatePNG
Bild hab ich hier geholt:
![]() Pfad ist sicher wegen Zeilenumbruch an der Stelle komisch. Hab die Meldung aus dem Dialog kopiert. Sherlock |
AW: AnimatePNG
Zitat:
EDIT: Der Pfad zum Ausgangs File wird verändert daher findet er die Datei nicht. Muss das mal korrigieren dauert ein Weilchen. Danke. gruss |
AW: AnimatePNG
Sollte jetzt gehen..
Die PNG die du hochgeladen hast ist nicht kompatibel. Habe es oben zum Archiv addiert. gruss |
AW: AnimatePNG
Zitat:
Zitat:
Sherlock |
AW: AnimatePNG
Zitat:
gruss |
AW: AnimatePNG
Hab gar nicht gefragt..
Läuft denn das AlphaBlend und wie sieht es mit der CPU aus? APNG sollte 0 sein und GIF so um die 12% gruss |
AW: AnimatePNG
Das Fade-In der Bilder klappt.
CPU für GIF fängt bei 0% an und nach dem zehnten Durchlauf meines Beispiel-GIF ist es dann über 10% und irgendwann sogar bei 20%. Aber das läuft in einer VM, ich weiß nicht wie aussagekräftig das ist. Auf jeden Fall hat es etwas mit der Anzahl der Durchläufe zu tun. APNG verhält sich nicht so, daß sind in der Tat konstante 0%, unabhängig von der Anzahl der Wiederholungen. Sherlock |
AW: AnimatePNG
Zitat:
Danke für die Infos ich denke damit kann man leben. Für XP kann ich nichts tun das ist einfach zu alt das System. gruss |
AW: AnimatePNG
Mach ich doch gerne. Keep up the good work!
Sherlock |
AW: AnimatePNG
Quelltext von GifToAPNG hochgeladen so könnt ihr sehen wie die PNG zurecht gemacht wird.
Ich habe den nicht mehr optimiert wenn es jemand machen möchte bitte habe nichts dagegen. Man kann das noch schöner machen. Vernünftige Ausgabe der Fehlerbehandlung. Quelltext optimieren in Klasse. Progressbar addieren.. usw. Anmerkung: Die Flat API für GDIPlus ist von ![]() EDIT: Quelltext inklusive TPngAnimate Class addiert. Für diejenigen die es interessiert wie ich die 25% Cpu Auslastung minimiert habe. Vorher habe ich GdipDrawImageRectRectI verwendet. Jetzt erstelle ich vorher ein Array der einzelnen Bilder im APNG. GetImagefromFile
Delphi-Quellcode:
Ich kopiere den Bereich im ImageStrip vom APNG mit CloneBitmapAreaI.
if GDIP_CreateFromHDC(DC, PngGraphics) = OK then
begin if not Assigned(gp.cBitmap) then begin SetLength(gp.cBitmap, gp.FrameCount); for i := 0 to High(gp.cBitmap) do begin GDIP_CloneBitmapAreaI(w * (i + 1) - w, 0, w, h, PixelFormat32bppARGB, gp.PngImage, gp.cBitmapClone); GDIP_CreateCachedBitmap(Pointer(gp.cBitmapClone), PngGraphics, gp.cBitmap[i]); GDIP_DisposeImage(gp.cBitmapClone); end; end; GDIP_DeleteGraphics(PngGraphics); end; Anschließend erstelle ich das Array cBitmap mit CreateCachedBitmap die Bilder werden dann in DrawPngFrame gezeichnet.
Delphi-Quellcode:
natürlich werden die Ressourcen auch wieder freigegeben an erster Position in GetImagefromFile.
// einzelnes Bild auf Graphicsobjekt zeichnen
if gp.FrameCount = 0 then begin GDIP_DrawCachedBitmap(PngGraphics, gp.cBitmap[0], X, Y); LoopCount := 0; end else GDIP_DrawCachedBitmap(PngGraphics, gp.cBitmap[FrameNum], X, Y);
Delphi-Quellcode:
if gp.PngImage <> 0 then
GDIP_DisposeImage(gp.PngImage); if Assigned(gp.cBitmap) then begin for i := 0 to High(gp.cBitmap) do begin GDIP_DeleteCachedBitmap(gp.cBitmap[i]); gp.cBitmap[i] := nil; // ob das nötig ist da bin ich nicht so sicher. end; gp.cBitmap := nil; // Das Array wird ja hier komplett auf Nil gesetzt end; Das war's soweit. ![]() ![]() gruss |
AW: AnimatePNG
Es gibt ein Problem wenn das Autoplay ausgeschaltet ist.
Die Bilder werden dann nicht angezeigt weil die gp.fBlend Value auf 255 steht (voll Transparent) In PlayPng das ersetzen bzw. erweitern
Delphi-Quellcode:
Das selbe bei PlayGif
if (not AutoPlay) then
begin LoopCount := 0; if (Alpha > 0) or (gp.fBlend > 0) then begin repeat DrawPngFrame(gp.PngImage, 0, DC); Sleep(TimerInterval); Alpha := Alpha - 5; gp.fBlend := gp.fBlend - 5; Winprocessmessages; if Alpha < 0 then Alpha := 0; until (Alpha = 0) and (gp.fBlend = 0); end else DrawPngFrame(gp.PngImage, ShowFrame, DC); end;
Delphi-Quellcode:
gruss
if (not AutoPlay) then
begin LoopCount := 0; if (Alpha > 0) or (gp.fBlend > 0) then begin repeat DrawGifFrame(gp.GifImage[SelectedIndex], GuidFDT, ShowFrame, DC); Sleep(TimerInterval); Alpha := Alpha - 5; gp.fBlend := gp.fBlend - 5; Winprocessmessages; if Alpha < 0 then Alpha := 0; until (Alpha = 0) and (gp.fBlend = 0); end else DrawGifFrame(gp.GifImage[SelectedIndex], GuidFDT, ShowFrame, DC); end; |
AW: AnimatePNG
Neue Version..
gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:36 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