Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   AnimatePNG (https://www.delphipraxis.net/192106-animatepng.html)

Neutral General 28. Mär 2017 16:10

AW: AnimatePNG
 
Zitat:

Zitat von EWeiss (Beitrag 1365818)
Das Problem ist nur es gibt kein festes Format (Spezifikation) jeder kocht sein eigenes Süppchen.

Mein Link war der Link zu der APNG Spezifikation :gruebel:

Zitat:

Versuch es doch mal meine APNG Dateien in einem anderen Player zu öffnen.
Ich habe das Gefühl du bist der (einzige) der sein eigenes Süppchen kocht :duck:
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.

EWeiss 28. Mär 2017 16:12

AW: AnimatePNG
 
Zitat:

klingt eher nach einem Fehler auf deiner Seite.
Dann muss man das wohl so hinnehmen :)

gruss

Neutral General 28. Mär 2017 16:14

AW: AnimatePNG
 
:? :?

EWeiss 28. Mär 2017 16:19

AW: AnimatePNG
 
Zitat:

Die Standbilder sind für Programme/Browser die Animierte PNGs nicht unterstützen.
Du missverstehst hier etwas.

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

EWeiss 30. Mär 2017 20:58

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
Mein Dank geht an die Leute, die das für mich Optimiert haben.. LOL

EDIT2:
Nochmal optimiert sollte jetzt fertig sein. Siehe Pic Fast0.
Das gleiche noch mit Gif dann war's das.


gruss

EWeiss 31. Mär 2017 04:56

AW: AnimatePNG
 
Neue Version oben.
Was ich geändert habe steht auch dort.

gruss

Delphi-Laie 31. Mär 2017 10:58

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.

EWeiss 31. Mär 2017 15:59

AW: AnimatePNG
 
Zitat:

Zu meiner Verwunderung war die APNG zudem deutlich größer als die als Vorlage verwandte GIF
Vergleich doch mal das Datei Format dann weist du warum APNG größer ist.

Zitat:

"AnimatePNG.exe hat ein Problem festgestellt
Hatten wir schon ;) .. habe es nochmal aktualisiert.
Quelltext ist dabei.

Zitat:

die Ausgabe "...FrameCount=.." besagt das ja nicht
Klar und zwar deutlich ist der Frame Count 0 dann wurde auch nichts extrahiert.

Zudem wird eine Fehlermeldung ausgegeben, dürfte bei deiner Gif Win32Error sein.
Warum das so ist habe ich dir schon ein paar Seiten vorher hier im Thread erklärt.

gruss

Namenloser 31. Mär 2017 16:47

AW: AnimatePNG
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1366048)
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.

Bei PNG hängt auch viel davon ab, wie man es speichert. Standardmäßig verwendet PNG meist 32 Bit oder 24 Bit pro Pixel. GIFs dagegen verwenden eine Palette mit 256 Farben. Allerdings kann man – was viele nicht wissen – auch bei PNGs Paletten verwenden, sogar mit weniger als 256 Farben und sogar mit Alphakanal. Sowas habe ich auch schon mal gemacht, als ich ein PNG sehr stark komprimieren musste. Leider unterstützen die meisten Programme diese Modi aber nur zum Lesen. Zum Erstellen braucht man spezielle Tools wie pngquant (https://pngquant.org/).

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 (http://optipng.sourceforge.net/), die mehrere Kombinationen bruteforcen und so aus existierenden PNGs noch mal 10% - 20% rausholen.

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.

EWeiss 31. Mär 2017 16:59

AW: AnimatePNG
 
Zitat:

Standardmäßig verwendet PNG meist 32 Bit pro Pixel
Und das Format verwende ich um auch den Alpha Kanal zu gewähren.
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

Delphi-Laie 31. Mär 2017 17:05

AW: AnimatePNG
 
Zitat:

Zitat von EWeiss (Beitrag 1366078)
Zitat:

"AnimatePNG.exe hat ein Problem festgestellt
Hatten wir schon ;) .. habe es nochmal aktualisiert.

Es hat sich aber leider nichts geändert, geschweige denn, verbessert. Das / ein Problem, das von Windows leider in keiner Weise konkretisiert wird, ist immer noch vorhanden.

Zitat:

Zitat von EWeiss (Beitrag 1366078)
Quelltext ist dabei.

Ab welchem Delphi compiliert das denn? Wegen dieser massiven Probleme vermute ich ein ziemlich aktuelles Delphi.

An sich ein akzeptables Angebot, nur bezweifele ich, als Außenstehender das Problem in vertretbarer Zeit zu lösen.

EWeiss 31. Mär 2017 17:15

AW: AnimatePNG
 
Zitat:

Es hat sich aber leider nichts geändert, geschweige denn, verbessert. Das / ein Problem, das von Windows leider in keiner Weise konkretisiert wird, ist immer noch vorhanden.
lösch doch einfach mal die Ini.

user/deinname/appdata/roaming/BrewIdeas/AnimatePNG

Zitat:

Ab welchem Delphi compiliert das denn?
D2010

gruss

Delphi-Laie 31. Mär 2017 17:28

AW: AnimatePNG
 
Zitat:

Zitat von EWeiss (Beitrag 1366091)
lösch doch einfach mal die Ini.

Yo, jetzt funktioniert es, danke!

Delphi-Laie 31. Mär 2017 17:32

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.

EWeiss 31. Mär 2017 17:44

AW: AnimatePNG
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1366094)
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.

XP? Wenn ich mich nicht irre.
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

Ghostwalker 31. Mär 2017 21:10

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 :)

EWeiss 1. Apr 2017 05:16

AW: AnimatePNG
 
Zitat:

Zitat von Ghostwalker (Beitrag 1366108)
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 :)

Ist ja auch nicht mehr das jüngste. (So wie ich) LOL.
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

EWeiss 4. Apr 2017 11:06

AW: AnimatePNG
 
Neue Version..
Infos siehe oben.

gruss

Sherlock 4. Apr 2017 11:23

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 (http://i826.photobucket.com/albums/z...APNG-Glass.png) in den png-Ordner kopiert, und es wird gemeldet, es sei kein Bild da.


Achja: Immer noch Win10 Prof auf einem Mac via Parallels.

Sherlock

EWeiss 4. Apr 2017 11:28

AW: AnimatePNG
 
Zitat:

Zitat von Sherlock (Beitrag 1366371)
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

Achja: Immer noch Win10 Prof auf einem Mac via Parallels.

Sherlock

Kannst mal bitte hochladen das GIF?
Hmm komischer pfad "imag es"

gruss

Sherlock 4. Apr 2017 11:31

AW: AnimatePNG
 
Bild hab ich hier geholt: http://tclhost.com/nyzsQKk.gif

Pfad ist sicher wegen Zeilenumbruch an der Stelle komisch. Hab die Meldung aus dem Dialog kopiert.

Sherlock

EWeiss 4. Apr 2017 11:35

AW: AnimatePNG
 
Zitat:

Zitat von Sherlock (Beitrag 1366374)
Bild hab ich hier geholt: http://tclhost.com/nyzsQKk.gif

Pfad ist sicher wegen Zeilenumbruch an der Stelle komisch. Hab die Meldung aus dem Dialog kopiert.

Sherlock

Ok danke teste das mal bei mir.

EDIT:
Der Pfad zum Ausgangs File wird verändert daher findet er die Datei nicht.
Muss das mal korrigieren dauert ein Weilchen.
Danke.

gruss

EWeiss 4. Apr 2017 12:04

AW: AnimatePNG
 
Sollte jetzt gehen..
Die PNG die du hochgeladen hast ist nicht kompatibel.

Habe es oben zum Archiv addiert.

gruss

Sherlock 4. Apr 2017 12:36

AW: AnimatePNG
 
Zitat:

Zitat von EWeiss (Beitrag 1366382)
Sollte jetzt gehen..

In der Tat :thumb:

Zitat:

Zitat von EWeiss (Beitrag 1366382)
Die PNG die du hochgeladen hast ist nicht kompatibel.

Schade, im FF geht's. Aber weiter so!

Sherlock

EWeiss 4. Apr 2017 12:44

AW: AnimatePNG
 
Zitat:

Zitat von Sherlock (Beitrag 1366389)
Zitat:

Zitat von EWeiss (Beitrag 1366382)
Sollte jetzt gehen..

In der Tat :thumb:

Zitat:

Zitat von EWeiss (Beitrag 1366382)
Die PNG die du hochgeladen hast ist nicht kompatibel.

Schade, im FF geht's. Aber weiter so!

Sherlock

Zu wenig Interesse hier deshalb schenke ich mir das.

gruss

EWeiss 4. Apr 2017 13:11

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

Sherlock 4. Apr 2017 13:28

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

EWeiss 4. Apr 2017 13:37

AW: AnimatePNG
 
Zitat:

Zitat von Sherlock (Beitrag 1366397)
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

OK ;)
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

Sherlock 4. Apr 2017 13:45

AW: AnimatePNG
 
Mach ich doch gerne. Keep up the good work!

Sherlock

EWeiss 5. Apr 2017 05:00

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 turboPASCAL.

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:
  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;
Ich kopiere den Bereich im ImageStrip vom APNG mit CloneBitmapAreaI.
Anschließend erstelle ich das Array cBitmap mit CreateCachedBitmap die Bilder werden dann in DrawPngFrame gezeichnet.

Delphi-Quellcode:
// 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);
natürlich werden die Ressourcen auch wieder freigegeben an erster Position in GetImagefromFile.
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.
Stress Bitmap
Animationen.. Bei Bilder Klicken und gesamten Ordner Herunterladen sind nur 330MB

gruss

EWeiss 8. Apr 2017 10:00

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:
  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;
Das selbe bei PlayGif
Delphi-Quellcode:
  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;
gruss

EWeiss 8. Jun 2018 16:01

AW: AnimatePNG
 
Neue Version..

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:44 Uhr.
Seite 4 von 4   « Erste     234   

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