Seite 2 von 3

Re: GIFObject (windows only)

Verfasst: 12.03.2012 14:22
von ts-soft
1 GIF Objekt, das wird ganz am Ende Destroyt, mehrere Images mit ID, die werden mit obj\FreeImage(ID) freigegeben.
Die Frames sind unabhängig und werden mit FreeImage(ID) freigegeben.
Vor einem Destroy() braucht man nichts freigeben, alle nicht freigegeben Images werden automatisch freigegeben,
mit Ausnahme, der mit GetFrame erzeugten, aber die werden am Ende auch von PB freigegeben :mrgreen: .

1 Objekt, viele Images die zum Objekt gehören, noch mehr Frames, die aber nicht zum Objekt gehören :wink:

Re: GIFObject (windows only)

Verfasst: 12.03.2012 19:20
von Nino
Hallo ts-soft,

ist dies quasi Ersatz und Nachfolger des AnimGIFGadgets mit zusätzlichen Funktionen, oder bietet das AnimGIFGadget irgendwelche Möglichkeiten, die das GIFObject nicht hat?

Grüße, Nino

Re: GIFObject (windows only)

Verfasst: 12.03.2012 19:26
von ts-soft
AnimGIFGadget erstellt autom. ein animiertes GIFGadget. Nicht mehr und nicht weniger.

GIFObject ermöglicht Zugriff auf alle Arten von GIFs, sowie evtl. Frames.
Diese können dann in PB genutzt werden wie alle anderen Images.
Also ein Ersatz für das fehlende UseGIFImageDecoder() :wink:

Re: GIFObject (windows only)

Verfasst: 12.03.2012 19:42
von Nino
Ah, jetzt hab' ich's verstanden. :)
Vielen Dank!

Re: GIFObject (windows only)

Verfasst: 12.03.2012 19:48
von ts-soft
Wenn Du mal hier: http://www.purebasic.fr/german/viewtopi ... 00#p300200
guckst und dann mal das Beispiel ausprobierst, siehste welche Möglichkeiten sich
daraus ergeben, die AnimGadget natürlich nicht bietet, z.B. eine GIF-Datei als
Progressbar-Ersatz benutzen.

Re: GIFObject (windows only)

Verfasst: 12.03.2012 20:36
von ts-soft
Neues Beispiel!

Einfaches Programm um alle Frames eines Gifs als PNG zu speichern:

Code: Alles auswählen

EnableExplicit

UsePNGImageEncoder()
XIncludeFile "GIFObject.pbi"

Procedure GifFrames2Png(GifFile.s, OutputDir.s)
  Protected.GIFObject obj = NewGIFObject()
  Protected.i img, buffer, count, i, png
  Protected.s File = GetFilePart(GifFile)
  File = Left(File, Len(File) - Len(GetExtensionPart(File)) - 1)
  
  If Right(OutputDir, 1) <> "\" : OutputDir + "\" : EndIf
  CompilerIf #PB_Compiler_Unicode
    buffer = AllocateMemory(StringByteLength(OutputDir, #PB_Ascii) + 1)
    If buffer
      PokeS(buffer, OutputDir, -1, #PB_Ascii)
      MakeSureDirectoryPathExists_(buffer)
      FreeMemory(buffer)
    EndIf
  CompilerElse
    MakeSureDirectoryPathExists_(@OutputDir)
  CompilerEndIf

  If obj
    img = obj\LoadImage(#PB_Any, GifFile)
    If img
      count = obj\CountFrames(img) - 1
      For i = 0 To count
        png = obj\GetFrame(img, i)
        SaveImage(png, OutputDir + File + Str(i + 1) + ".png", #PB_ImagePlugin_PNG)
        FreeImage(png)
      Next
      obj\FreeImage(img)
    EndIf
    obj\Destroy()
  EndIf
EndProcedure

Define.s File = OpenFileRequester("Select GIF-File", "", "GIF-File (*.gif)|*.gif", 0)
If File
  Define.s Dir = PathRequester("Select Outputdir", "")
  If Dir
    GifFrames2Png(File, Dir)
    RunProgram(Dir)
  EndIf
EndIf

Re: GIFObject (windows only)

Verfasst: 12.03.2012 20:43
von RSBasic
:allright:²
Ich staune über deine Motivation und Zeit. :wink:

Re: GIFObject (windows only)

Verfasst: 12.03.2012 20:51
von ts-soft
Bevor ich mir das dämliche Fernsehprogramm reinziehe :mrgreen:
Kreuzworträtsel ist auch nicht das wahre Gehirnjogging, also
macht man das was Spaß macht. Als gegenwärtiger Solist, bleibt
nur progammieren übrig :wink:

Re: GIFObject (windows only)

Verfasst: 13.03.2012 09:39
von dige
@ts-soft: vielen Dank! Mit Deinem Engagement bewirkst Du hier noch eine Renaissance des GIF Formates :-) :allright:

Re: GIFObject (windows only)

Verfasst: 13.03.2012 09:55
von Bisonte
dige hat geschrieben:@ts-soft: vielen Dank! Mit Deinem Engagement bewirkst Du hier noch eine Renaissance des GIF Formates :-) :allright:
Wenn du nur noch die klitzekleinekleinigkeit der möglichen Transparenz bei Gif89a hinbekommen würdest ;) ....