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

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

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() 
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

²
Ich staune über deine Motivation und Zeit.

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

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

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

Wenn du nur noch die klitzekleinekleinigkeit der möglichen Transparenz bei Gif89a hinbekommen würdest

....