AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Array of Integer und crash

Ein Thema von EWeiss · begonnen am 19. Mär 2017 · letzter Beitrag vom 27. Sep 2018
 
EWeiss
(Gast)

n/a Beiträge
 
#30

AW: Array of Integer und crash

  Alt 19. Mär 2017, 22:58
Das sieht aber immer noch nicht so aus, wie ich das gezeigt hatte:

Sorry das mit GetMem funktioniert nicht.
GetMem erwartet einen Pointer PropItem ist aber als TPropertyItem definiert.
Was aber korrekt ist ich muss den Speicher vor GetPropertyItem allokieren ich habe es nachher gemacht.


EDIT:
OK hab dich verstanden funktioniert jetzt
Danke für deine Mühe und Zeit.
Habe wieder einiges gelernt.

So soll es sein das Ergebniss.. jedes Frame läuft 80ms.
Hier nochmal das gesamt Ergebnis vielleicht kann es ja mal jemand brauchen.

Delphi-Quellcode:
procedure TAnimateGif.GetGifFrameDelays(GifImage: Cardinal; FrameCount: UINT;
  var FrameDelay: TFrameDelay);
var
  ISize: integer;
  PropSize: UINT;
  Prop: TProp;
  PropCount: integer;
begin

  ISize := 0;

  // Datengröße vom EXIF-Tag PropertyTagFrameDelay ermitteln
  if GDIP_GetPropertyItemSize(GifImage, PropertyTagFrameDelay, PropSize) = S_OK then
  begin
    // Speicher allokieren
    GetMem(PropItem, PropSize);
    
    // Daten auslesen
    if GetPropertyItem(GifImage, PropertyTagFrameDelay, PropSize, PropItem) = S_OK then
    begin
      // Bytearray dimensionieren
      SetLength(Prop, (PropItem.length + 1));
      CopyMemory(@Prop[0], PropItem.value, PropItem.length);

      // PropertyTyp ermitteln
      case PropItem.type_ of
        PropertyTagTypeByte:
          ISize := 1;

        PropertyTagTypeShort:
          ISize := 2;

        PropertyTagTypeLong:
          ISize := 4;
      end;

      // Array zur Aufnahme der Pausenzeiten dimensionieren
      SetLength(FrameDelay, FrameCount);
      // Pausenzeiten der einzelnen Bilder aus Bytearray kopieren
      for PropCount := 0 to (FrameCount - 1) do
      begin
        CopyMemory(@FrameDelay[PropCount], @Prop[PropCount * ISize], ISize);
        FrameDelay[PropCount] := FrameDelay[PropCount] * 10;
      end;
    end;
    FreeMem(PropItem);
  end;

end;
gruss

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


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 16:52 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