AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte AnimatePNG

AnimatePNG

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

n/a Beiträge
 
#1

AW: AnimatePNG

  Alt 28. Mär 2017, 09:20
So habe den Konverter fertig.
@Delphi-Laie

Was deine Datei angeht.
Da liegt kein Problem im Code selber vor, dein Problem ist das die Datei einfach zu groß ist also die menge an Frames.
Du hast 984 Frames diese mal 512 in der weite.
Das bedeutet deine Datei hätte dann eine gesamt weite im Speicher von 503808 Pixeln.
Das schafft die GDI+ nicht zu speichern warum auch immer.

Delphi-Quellcode:
function TfrmMain.SaveToPNG(FullName: PWideChar; img: GPImage): GPStatus;
var
  encoderCLSID: TGUID;
begin

  GetEncoderClsid('image/png', encoderCLSID);
  Result := GdipSaveImageToFile(img, FullName, @encoderCLSID, nil);
end;
Hier gibt es dann einen Win32Error.

gruss

Geändert von EWeiss (11. Jul 2019 um 15:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.948 Beiträge
 
Delphi 12 Athens
 
#2

AW: AnimatePNG

  Alt 28. Mär 2017, 09:49
Aber das ist ja nicht ein großes Bild, sondern 984 einzelne. Da sollte die Anzahl der Frames keine Rolle spielen.

Im Moment kann ich mir das allerdings nicht anschauen, erst zu Hause.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: AnimatePNG

  Alt 28. Mär 2017, 09:57
Aber das ist ja nicht ein großes Bild, sondern 984 einzelne. Da sollte die Anzahl der Frames keine Rolle spielen.

Im Moment kann ich mir das allerdings nicht anschauen, erst zu Hause.
Es wird auf die Größe von 512 Pixeln Transformiert.
Es gibt eine Möglichkeit die Bilder unskaliert umzuwandeln habe das aber im Moment einfach mal deaktiviert (nicht öffentlich gemacht)
weil in meiner Anwendung 512x512 am besten aussieht.

Zitat:
Da sollte die Anzahl der Frames keine Rolle spielen.
Auch wenn es nur ein Bild ist muss ich doch alle Bilder Hintereinander erst mal Temporär aufarbeiten.
Und die stehen im Speicher hintereinander.

Delphi-Quellcode:
      for K := 0 to FrameCount - 1 do
      begin
        GPStatus(GdipImageSelectActiveFrame(img, @pGUID, K));
        // Image zeichnen
        if (MaxSquareSize = 512) then
        begin
          GPStatus(GdipDrawImageRectRectI(Graphics, img, xStep + xP, yP, xS, yS, 0, 0, round(W),
              round(H), UnitPixel, nil, Abort, nil));
          xStep := xStep + AniHeader.Width;
        end
        else
        begin
          GPStatus(GdipDrawImageRectI(Graphics, img, xStep, 0, round(W), round(H)));
          xStep := xStep + round(W);
        end;

        lblValue.Caption := 'Value = ' + IntToStr(K + 1);
        lblValue.Repaint;
      end;
      // graphics freigeben
      GPStatus(GdipDeleteGraphics(Graphics));
    end;
Zurück wird dann 1 Image geliefert das alle Frames enthält.

    Result := BitmapToImage(imgHDC);

gruss

Geändert von EWeiss (28. Mär 2017 um 10:14 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: AnimatePNG

  Alt 28. Mär 2017, 11:06
Zurück wird dann 1 Image geliefert das alle Frames enthält.

    Result := BitmapToImage(imgHDC);
Bist du dir sicher, dass sowas der richtige Ansatz ist?

Um es ein die analoge Welt zu übersetzen:
Du packst das Blätter-Paket mit den Bildern aus und klebst alle Bilder hintereinander auf eine lange Papierrolle und versuchst diese abzuspielen.
Das diese Rolle dann zu lang wird, um sie ohne "knittern" und "einreißen" bedienen zu können sollte eigentlich auf der Hand liegen.
Versuche doch mal lieber den Ansatz, einfach die linke obere Ecke zu tackern und das Blätter-Paket wie ein Daumenkino zu bedienen.

Da es dir schwer fällt von solchen abstrakten Sachen zu konkreten Code zu kommen:
Immer nur das jeweils aktuelle Frame decodieren und anzeigen, nach dem Anzeigen dann verwerfen.
Und nicht so schnell wie möglich zeichnen, sondern einfach nur stumpf die eingestellte Framerate.
Stelle mal bewusst das Ausführen der Zeichnenroutine auf 25 FPS bzw. alle 40 ms.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: AnimatePNG

  Alt 28. Mär 2017, 11:09
Zurück wird dann 1 Image geliefert das alle Frames enthält.

    Result := BitmapToImage(imgHDC);
Bist du dir sicher, dass sowas der richtige Ansatz ist?

Um es ein die analoge Welt zu übersetzen:
Du packst das Blätter-Paket mit den Bildern aus und klebst alle Bilder hintereinander auf eine lange Papierrolle und versuchst diese abzuspielen.
Das diese Rolle dann zu lang wird, um sie ohne "knittern" und "einreißen" bedienen zu können sollte eigentlich auf der Hand liegen.
Versuche doch mal lieber den Ansatz, einfach die linke obere Ecke zu tackern und das Blätter-Paket wie ein Daumenkino zu bedienen.

Da es dir schwer fällt von solchen abstrakten Sachen zu konkreten Code zu kommen:
Immer nur das jeweils aktuelle Frame decodieren und anzeigen, nach dem Anzeigen dann verwerfen.
Und nicht so schnell wie möglich zeichnen, sondern einfach nur stumpf die eingestellte Framerate.
Stelle mal bewusst das Ausführen der Zeichnenroutine auf 25 FPS bzw. alle 40 ms.
Es zeigt das du keine Ahnung von der Aufarbeitung einer APNG Datei hast.
Beschäftige dich doch erst mal damit bevor du irgendwelche Sprüche los lässt die kein Hand und kein Fuß haben.
Da fällt mir ehrlich gesagt auch einiges schwer.

Zitat:
Bist du dir sicher, dass sowas der richtige Ansatz ist?
Du hast doch gar keine Ahnung für was diese Funktion gut ist.. und was in dieser enthalten ist..
Also ruhig Blut.

Also Konstruktive Dinge wären durchaus angebracht.

gruss

Geändert von EWeiss (28. Mär 2017 um 11:12 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: AnimatePNG

  Alt 28. Mär 2017, 11:26
Es zeigt das du keine Ahnung von der Aufarbeitung einer APNG Datei hast.
Beschäftige dich doch erst mal damit bevor du irgendwelche Sprüche los lässt die kein Hand und kein Fuß haben.
Hast du dich schonmal gefragt, warum du in vielen Threads den Alleinunterhalter gibst?
Der Ton macht die Musik!

Du hast doch gar keine Ahnung für was diese Funktion gut ist.. und was in dieser enthalten ist..
Also ruhig Blut.
Diese Funktion nimmt alle Frames aus einer APNG und schreibt die hintereinander in ein großes Bitmap:
Du hast 984 Frames diese mal 512 in der weite.
Das bedeutet deine Datei hätte dann eine gesamt weite im Speicher von 503808 Pixeln.
Oder du erklärst es zu ungenau...aber dafür können wir ja nichts.

Also Konstruktive Dinge wären durchaus angebracht.
Gerne, aber dazu musst du auch mal die Ideen der anderen akzeptieren und überlegen, ob die vielleicht stimmen könnten.
Konstruktive Vorschläge sind erst konstruktiv, wenn sie auch umgesetzt werden.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: AnimatePNG

  Alt 28. Mär 2017, 11:32
Zitat:
Diese Funktion nimmt alle Frames aus einer APNG und schreibt die hintereinander in ein großes Bitmap:
Nö tut sie nicht.
Was steht den da? BitmapToImage

Das was ich meinte war der Beitrag (code da drüber).
For k := bla, bla.

BitmapToImage konvertiert lediglich 1 HBitmap in ein GDIplus fähiges Image.

Zitat:
Der Ton macht die Musik!
Ach ja?
Was soll man von solchen Sprüchen halten.

Zitat:
Um es ein die analoge Welt zu übersetzen:
Du packst das Blätter-Paket mit den Bildern aus und klebst alle Bilder hintereinander auf eine lange Papierrolle und versuchst diese abzuspielen.
Das diese Rolle dann zu lang wird, um sie ohne "knittern" und "einreißen" bedienen zu können sollte eigentlich auf der Hand liegen.
Versuche doch mal lieber den Ansatz, einfach die linke obere Ecke zu tackern und das Blätter-Paket wie ein Daumenkino zu bedienen.
Sowas kann man sich sparen und verursacht nur böses Blut.
Sachlich bleiben ohne das sorry dumme Gewäsch.

Und nun möchte ich dich bitten hier im Thread keinen Stress zu verursachen.

gruss

Geändert von EWeiss (28. Mär 2017 um 12:55 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 18:22 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