AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte AnimatePNG
Thema durchsuchen
Ansicht
Themen-Optionen

AnimatePNG

Ein Thema von EWeiss · begonnen am 20. Mär 2017 · letzter Beitrag vom 8. Jun 2018
Antwort Antwort
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.814 Beiträge
 
Delphi 12 Athens
 
#1

AW: AnimatePNG

  Alt 4. Apr 2017, 13:28
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
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: AnimatePNG

  Alt 4. Apr 2017, 13:37
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

Geändert von EWeiss ( 4. Apr 2017 um 13:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.814 Beiträge
 
Delphi 12 Athens
 
#3

AW: AnimatePNG

  Alt 4. Apr 2017, 13:45
Mach ich doch gerne. Keep up the good work!

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: AnimatePNG

  Alt 5. Apr 2017, 05:00
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

Geändert von EWeiss ( 5. Apr 2017 um 10:22 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: AnimatePNG

  Alt 8. Apr 2017, 10:00
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: AnimatePNG

  Alt 8. Jun 2018, 16:01
Neue Version..

gruss
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:11 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