GIFObject (windows only)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: GIFObject (windows only)

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: GIFObject (windows only)

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: GIFObject (windows only)

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: GIFObject (windows only)

Beitrag von Nino »

Ah, jetzt hab' ich's verstanden. :)
Vielen Dank!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: GIFObject (windows only)

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: GIFObject (windows only)

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: GIFObject (windows only)

Beitrag von RSBasic »

:allright:²
Ich staune über deine Motivation und Zeit. :wink:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: GIFObject (windows only)

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
dige
Beiträge: 1242
Registriert: 08.09.2004 08:53

Re: GIFObject (windows only)

Beitrag von dige »

@ts-soft: vielen Dank! Mit Deinem Engagement bewirkst Du hier noch eine Renaissance des GIF Formates :-) :allright:
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
Bisonte
Beiträge: 2470
Registriert: 01.04.2007 20:18

Re: GIFObject (windows only)

Beitrag 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 ;) ....
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Antworten