Delphi-PRAXiS
Seite 10 von 16   « Erste     8910 1112     Letzte »    

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)

Luckie 27. Mär 2017 23:01

AW: AnimatePNG
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1365691)
Abgeben? Wir sind doch längst im präemptiven Windows, in dem den Prozessen die Rechenzeit zugewiesen wird?!

Das meinte ich auch eigentlich.

EWeiss 28. Mär 2017 09:20

AW: AnimatePNG
 
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

jaenicke 28. Mär 2017 09:49

AW: AnimatePNG
 
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.

EWeiss 28. Mär 2017 09:57

AW: AnimatePNG
 
Zitat:

Zitat von jaenicke (Beitrag 1365733)
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.

Delphi-Quellcode:
    Result := BitmapToImage(imgHDC);


gruss

TiGü 28. Mär 2017 11:06

AW: AnimatePNG
 
Zitat:

Zitat von EWeiss (Beitrag 1365734)
Zurück wird dann 1 Image geliefert das alle Frames enthält.

Delphi-Quellcode:
    Result := BitmapToImage(imgHDC);

Bist du dir sicher, dass sowas der richtige Ansatz ist? :shock:

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.

EWeiss 28. Mär 2017 11:09

AW: AnimatePNG
 
Zitat:

Zitat von TiGü (Beitrag 1365744)
Zitat:

Zitat von EWeiss (Beitrag 1365734)
Zurück wird dann 1 Image geliefert das alle Frames enthält.

Delphi-Quellcode:
    Result := BitmapToImage(imgHDC);

Bist du dir sicher, dass sowas der richtige Ansatz ist? :shock:

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

TiGü 28. Mär 2017 11:26

AW: AnimatePNG
 
Zitat:

Zitat von EWeiss (Beitrag 1365746)
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!

Zitat:

Zitat von EWeiss (Beitrag 1365746)
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:
Zitat:

Zitat von EWeiss (Beitrag 1365746)
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.

Zitat:

Zitat von EWeiss (Beitrag 1365746)
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.

EWeiss 28. Mär 2017 11:32

AW: AnimatePNG
 
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

EWeiss 28. Mär 2017 12:32

AW: AnimatePNG
 
@jaenicke

Hab mal ein Pic angehängt bei dem man sehen kann wie die Bilder temporär abgelegt werden bevor sie zu einem Image kombiniert werden.
Man sieht nicht viel aber es lässt einen erahnen was passiert wenn man eine Datei mit 984 Frames bearbeiten muss.
Ich glaube deshalb das GDI+ das einfach nicht schafft.

14 Frames..

gruss

Delphi-Laie 28. Mär 2017 12:46

AW: AnimatePNG
 
Also, ich begrüße es, daß Emil sich einer solchen Herausforderung stellt und empfinde diesen Angriff auf ihn als deplaciert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:03 Uhr.
Seite 10 von 16   « Erste     8910 1112     Letzte »    

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