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
Seite 10 von 16   « Erste     8910 1112     Letzte »    
EWeiss
Projekt entfernt..

Geändert von EWeiss (24. Jul 2019 um 05:48 Uhr)
 
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#91
  Alt 28. Mär 2017, 00:01
Abgeben? Wir sind doch längst im präemptiven Windows, in dem den Prozessen die Rechenzeit zugewiesen wird?!
Das meinte ich auch eigentlich.
Michael
  Mit Zitat antworten Zitat
EWeiss
 
#92
  Alt 28. Mär 2017, 10: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 16:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

 
Delphi 11 Alexandria
 
#93
  Alt 28. Mär 2017, 10: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
  Mit Zitat antworten Zitat
EWeiss
 
#94
  Alt 28. Mär 2017, 10: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 11:14 Uhr)
  Mit Zitat antworten Zitat
TiGü

 
Delphi 10.4 Sydney
 
#95
  Alt 28. Mär 2017, 12: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
 
#96
  Alt 28. Mär 2017, 12: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 12:12 Uhr)
  Mit Zitat antworten Zitat
TiGü

 
Delphi 10.4 Sydney
 
#97
  Alt 28. Mär 2017, 12: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
 
#98
  Alt 28. Mär 2017, 12: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 13:55 Uhr)
  Mit Zitat antworten Zitat
EWeiss
 
#99
  Alt 28. Mär 2017, 13:32
@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

Geändert von EWeiss (11. Jul 2019 um 16:47 Uhr)
  Mit Zitat antworten Zitat
Delphi-Laie

 
Delphi 10.1 Berlin Starter
 
#100
  Alt 28. Mär 2017, 13:46
Also, ich begrüße es, daß Emil sich einer solchen Herausforderung stellt und empfinde diesen Angriff auf ihn als deplaciert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 10 von 16   « Erste     8910 1112     Letzte »    


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 21:06 Uhr.
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