Delphi-PRAXiS
Seite 15 von 16   « Erste     5131415 16      

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)

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:28 Uhr.
Seite 15 von 16   « Erste     5131415 16      

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