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

GIFObject (windows only)

Beitrag von ts-soft »

Nachdem ich von SoS höflich gebeten wurde, habe ich mal diese Objektklasse erstellt.
Diese Klasse ermöglicht das laden aller Arten von GIFs und deren Weiterverwendung,
also z.B. Speichern der Frames in allen von PB unterstützten Formaten.

Beschreibung GIFObject

Als erstes müssen wir das Objekt erstellen, das geht so:

Define.GIFObject meinevariable = NewGIFObject()

Jetzt können wir die Methoden des Objects nutzen.
Es stehen folgende Methoden zur Verfügung:

LoadImage()
Syntax:
Ergebnis = meinevariable\LoadImage.i(ID, FileName.s)
Parameter:
ID = Gibt eine Nummer an, mit der das geladene Bild identifiziert wird.
#PB_Any kann angegeben werden, um diese Nummer automatisch zu generieren

FileName = Gibt den Namen der zu ladenden Datei an. Wenn der Dateiname
keinen vollständigen Pfad beinhaltet, wird dieser relativ zum aktuellen Verzeichnis interpretiert

Rückgabewert:
Gibt einen Wert ungleich Null zurück, wenn das Bild erfolgreich geladen wurde,
und Null wenn das Bild nicht geladen werden konnte. Wenn #PB_Any als #Image
Parameter angegeben wurde, dann wird bei Erfolg die automatisch generierte Nummer zurückgegeben.

CatchImage()
Syntax:
Ergebnis = meinevariable\CatchImage.i(ID, *Memory, Size.l)
Parameter:
ID = Gibt die Nummer an, mit welcher das geladene Bild identifiziert wird. #PB_Any kann angegeben
werden, um diese Nummer automatisch zu generieren.

*Memory = Gibt die Speicheradresse an, von der das Bild geladen werden soll.

Size = Gibt die Größe des Bildes in Bytes an.

Rückgabewert:
Gibt einen Wert ungleich Null zurück, wenn das Bild erfolgreich geladen wurde, und Null wenn das
Bild nicht geladen werden konnte. Wenn #PB_Any als #Image Parameter angegeben wurde, dann wird bei
Erfolg die automatisch generierte Nummer zurückgegeben.

FreeImage()
Syntax:
meinevariable\FreeImage(ID = #PB_Any)
Parameter:
ID (optional) = Gibt das freizugebende Bild an. Wenn keine ID angegeben wird, werden alle mit dieser Lib
erzeugten Bilder freigegeben, jedoch nicht die mit der Function GetFrame() erstellten!

Rückgabewert:
Diese Funktion gibt keinen Wert zurück.

GetFrame()
Syntax:
Ergebnis = meinevariable\GetFrame(ID, Number.l)
Parameter:
ID = Die ID, die bei LoadImage() oder CatchImage() angegeben wurde, bzw. das Ergebnis bei Angabe von #PB_Any.
Number = Die Nummer des Frames, die Zählung beginnt bei 0 und endet bei CountFrames() - 1

Rückgabewert:
image (nicht die ImageID!, wie bei mit #PB_Any erzeugten Images) bei Erfolg, ansonsten 0.

CountFrames()
Syntax:
Ergebnis = meinevariable\CountFrames(ID)
Parameter:
ID = Die ID, die bei LoadImage() oder CatchImage() angegeben wurde, bzw. das Ergebnis bei Angabe von #PB_Any.

Rückgabewert:
Anzahl der Frames.

GetDelayTime()
Syntax:
Ergebnis = meinevariable\GetDelayTime(ID, Number.l = 0)
Parameter:
ID = Die ID, die bei LoadImage() oder CatchImage() angegeben wurde, bzw. das Ergebnis bei Angabe von #PB_Any.
Number (optional) = Die Nummer des Frames, wird diese Angabe weggelassen, wird das Ergebnis für Frame 0 ermittelt.

Rückgabewert:
Delayzeit in ms

Destroy()
Syntax:
meinevariable\Destroy()
Parameter:
keine

Rückgabewert:
Diese Funktion gibt keinen Wert zurück.

Diese Methode ist immer am Ende der Nutzung dieser Lib aufzurufen. Sie gibt alle Images, soweit noch nicht geschehen,
sowie sämtlichen genutzen Speicher, sowie die gdiplus.dll, wieder frei.
Die mit GetFrame() erstellten Images werden nicht freigegeben. Zum freigeben dieser Images kann man die PB Funktion
FreeImage() verwenden.

Der Code folgt im nächsten Beitrag!
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 »

Der Code:
[GIBObject.pbi]

Code: Alles auswählen

; Copyright (c) 2012 Thomas <ts-soft> Schulz

; Permission is hereby granted, free of charge, to any person obtaining a copy of this
; software and associated documentation files (the "Software"), to deal in the Software
; without restriction, including without limitation the rights to use, copy, modify, merge,
; publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to
; whom the Software is furnished to do so, subject to the following conditions:

; The above copyright notice and this permission notice shall be included in all copies or
; substantial portions of the Software.

; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
; BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
; ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

;==================================================================
;
; Library:           GIFObject
; Author:            Thomas <ts-soft> Schulz
; Date:              Mrz 11, 2012
; Version:           1.2.1
; Target OS:         Windows 2000 and higher
; Target Compiler:   PureBasic 4.60 and later
; Requires:          gdiplus.dll
;==================================================================

; History:
; 1.2, Mrz 13, 2012
; - removed backcolor
; + added support transparency
;
; 1.1
; added optional backcolor to LoadImage() and CatchImage()

CompilerIf Defined(GdiplusStartupInput, #PB_Structure) = 0
Structure GdiplusStartupInput
    GdiPlusVersion.l
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x64 ; ALIGN next pointer to 8
    PB_Alignment.b[4]
  CompilerEndIf
    *DebugEventCallback.DebugEventProc
    SuppressBackgroundThread.i
    SuppressExternalCodecs.i
EndStructure
CompilerEndIf

#PropertyTagFrameDelay = $5100

;{ Prototypes
Prototype __GdipCreateBitmapFromFile(filename.p-unicode, *bitmap)
Prototype __GdipCreateFromHDC(hdc, *graphics)
Prototype __GdipDeleteGraphics(*graphics)
Prototype __GdipDisposeImage(*image)
Prototype __GdipDrawImageI(*graphics, *image, x.l, y.l)
Prototype __GdipGetImageWidth(*image, *width)
Prototype __GdipGetImageHeight(*image, *height)
Prototype __GdipImageGetFrameCount(*image, *dimensionID.GUID, *count)
Prototype __GdipImageGetFrameDimensionsList(*image, *dimensionID.GUID, count.l)
Prototype __GdipImageSelectActiveFrame(*image, *dimensionID.GUID, frameIndex.l)
Prototype __GdipLoadImageFromStream(*stream, *bitmap)
Prototype __GdipGetPropertyItemSize(*image, propId.l, *size)
Prototype __GdipGetPropertyItem(*image, propId.l, propSize.l, *buffer)
Prototype __GdiplusShutdown(token)
Prototype __GdiplusStartup(*token, *input.GdiplusStartupInput, *output)
;}

Interface GIFObject
  LoadImage.i(ID, FileName.s)
  CatchImage.i(ID, *Memory, Size.l)
  FreeImage(ID = #PB_Any)
  GetFrame(ID, Number.l)
  CountFrames(ID)
  GetDelayTime(ID, Number.l = 0)
  Destroy()
EndInterface

Structure GIFImageList
  ID.i
  bitmap.i
  guid.GUID
  width.l
  height.l
  count.l
  pos.i
  *mem
  *mem2
EndStructure

Structure GIFClassTemplate
  *vTable
  ; GDI Functionpointer
  GdipCreateBitmapFromFile.__GdipCreateBitmapFromFile
  GdipCreateFromHDC.__GdipCreateFromHDC
  GdipDeleteGraphics.__GdipDeleteGraphics
  GdipDisposeImage.__GdipDisposeImage
  GdipDrawImageI.__GdipDrawImageI
  GdipGetImageWidth.__GdipGetImageWidth
  GdipGetImageHeight.__GdipGetImageHeight
  GdipImageGetFrameCount.__GdipImageGetFrameCount
  GdipImageGetFrameDimensionsList.__GdipImageGetFrameDimensionsList
  GdipImageSelectActiveFrame.__GdipImageSelectActiveFrame
  GdipLoadImageFromStream.__GdipLoadImageFromStream
  GdipGetPropertyItemSize.__GdipGetPropertyItemSize
  GdipGetPropertyItem.__GdipGetPropertyItem
  GdiplusShutdown.__GdiplusShutdown
  GdiplusStartup.__GdiplusStartup
  ;
  hDLL.i
  Token.i
  ;
  List ImageObjects.GIFImageList()
EndStructure

Procedure.i NewGIFObject()
  Protected *object.GIFClassTemplate
  Protected gdpsi.GdiplusStartupInput
  Protected token.i
  
  *object = AllocateMemory(SizeOf(GIFClassTemplate))
  If *object
    InitializeStructure(*object, GIFClassTemplate)
    With *object
      \vTable = ?VTable_GIFClass
      \hDLL = OpenLibrary(#PB_Any, "gdiplus.dll")
      If \hDLL <> 0
        \GdipCreateBitmapFromFile = GetFunction(\hDLL, "GdipCreateBitmapFromFile")
        \GdipCreateFromHDC = GetFunction(\hDLL, "GdipCreateFromHDC")
        \GdipDeleteGraphics = GetFunction(\hDLL, "GdipDeleteGraphics")
        \GdipDisposeImage = GetFunction(\hDLL, "GdipDisposeImage")
        \GdipDrawImageI = GetFunction(\hDLL, "GdipDrawImageI")
        \GdipGetImageWidth = GetFunction(\hDLL, "GdipGetImageWidth")
        \GdipGetImageHeight = GetFunction(\hDLL, "GdipGetImageHeight")
        \GdipImageGetFrameCount = GetFunction(\hDLL, "GdipImageGetFrameCount")
        \GdipImageGetFrameDimensionsList = GetFunction(\hDLL, "GdipImageGetFrameDimensionsList")
        \GdipImageSelectActiveFrame = GetFunction(\hDLL, "GdipImageSelectActiveFrame")
        \GdipLoadImageFromStream = GetFunction(\hDLL, "GdipLoadImageFromStream")
        \GdipGetPropertyItemSize = GetFunction(\hDLL, "GdipGetPropertyItemSize")
        \GdipGetPropertyItem = GetFunction(\hDLL, "GdipGetPropertyItem")
        \GdiplusShutdown = GetFunction(\hDLL, "GdiplusShutdown")
        \GdiplusStartup = GetFunction(\hDLL, "GdiplusStartup")
        gdpsi\GdiPlusVersion = 1
        \GdiplusStartup(@token, gdpsi, 0)
        \Token = token
      Else
        ClearStructure(*object, GIFClassTemplate)
        FreeMemory(*object)
        *object = 0
      EndIf
    EndWith
  EndIf
  ProcedureReturn *object
EndProcedure

Procedure.i GIFClass_LoadImage(*this.GIFClassTemplate, ID, FileName.s)
  Protected bitmap.i, width.l, height.l, guid.GUID, count.l, size.i
  Protected image.i, hdc.i, graphics.i, *mem
  
  With *this
    AddElement(\ImageObjects())
    \GdipCreateBitmapFromFile(FileName, @bitmap)
    If bitmap
      \ImageObjects()\bitmap = bitmap
      \GdipGetImageWidth(bitmap, @width)
      \ImageObjects()\width = width
      \GdipGetImageHeight(bitmap, @height)
      \ImageObjects()\height = height
      \GdipImageGetFrameDimensionsList(bitmap, @guid, 1)
      \ImageObjects()\guid = guid
      \GdipImageGetFrameCount(bitmap, @guid, @count)
      \ImageObjects()\count = count
      If count
        \GdipGetPropertyItemSize(bitmap, #PropertyTagFrameDelay, @size)
        If size
          *mem = AllocateMemory(size)
          If *mem
            \ImageObjects()\mem = *mem
            \GdipGetPropertyItem(bitmap, #PropertyTagFrameDelay, size, *mem)
            \ImageObjects()\pos = PeekI(*mem + 8 + SizeOf(Integer))
          EndIf
        EndIf
        \GdipImageSelectActiveFrame(bitmap, @guid, 0)
        image = CreateImage(ID, width, height, 32)
        If ID = #PB_Any : ID = image : EndIf
        \ImageObjects()\ID = ID
        hdc = StartDrawing(ImageOutput(ID))
        DrawingMode(#PB_2DDrawing_AlphaChannel)
        Box(0, 0, width, height, 0)
        \GdipCreateFromHDC(hdc, @graphics)
        DrawingMode(#PB_2DDrawing_AlphaBlend)
        \GdipDrawImageI(graphics, bitmap, 0, 0)
        StopDrawing()
        \GdipDeleteGraphics(graphics)
        ProcedureReturn image
      EndIf
    EndIf
  EndWith
EndProcedure

Procedure.i GIFClass_CatchImage(*this.GIFClassTemplate, ID, *Memory, Size.l)
  Protected bitmap.i, width.l, height.l, guid.GUID, count.l
  Protected image.i, hdc.i, graphics.i, *mem
  Protected *mem2 = GlobalAlloc_(#GMEM_MOVEABLE, Size)
  Protected *ptr, Stream.IStream
  
  If *mem2
    *ptr = GlobalLock_(*mem2)
    If *ptr
      CopyMemory(*Memory, *ptr, Size)
      CreateStreamOnHGlobal_(*mem2, #True, @Stream)
      GlobalUnlock_(*mem2)
      If Stream = 0
        GlobalFree_(*mem2)
        ProcedureReturn #False
      EndIf
    EndIf
    With *this
      AddElement(\ImageObjects())
      \GdipLoadImageFromStream(stream, @bitmap)
      stream\Release()
      \ImageObjects()\mem2 = *mem2
      If bitmap
        \ImageObjects()\bitmap = bitmap
        \GdipGetImageWidth(bitmap, @width)
        \ImageObjects()\width = width
        \GdipGetImageHeight(bitmap, @height)
        \ImageObjects()\height = height
        \GdipImageGetFrameDimensionsList(bitmap, @guid, 1)
        \ImageObjects()\guid = guid
        \GdipImageGetFrameCount(bitmap, @guid, @count)
        \ImageObjects()\count = count
        If count
          \GdipGetPropertyItemSize(bitmap, #PropertyTagFrameDelay, @size)
          If size
            *mem = AllocateMemory(size)
            If *mem
              \ImageObjects()\mem = *mem
              \GdipGetPropertyItem(bitmap, #PropertyTagFrameDelay, size, *mem)
              \ImageObjects()\pos = PeekI(*mem + 8 + SizeOf(Integer))
            EndIf
          EndIf
          \GdipImageSelectActiveFrame(bitmap, @guid, 0)
          image = CreateImage(ID, width, height, 32)
          If ID = #PB_Any : ID = image : EndIf
          \ImageObjects()\ID = ID
          hdc = StartDrawing(ImageOutput(ID))
          DrawingMode(#PB_2DDrawing_AlphaChannel)
          Box(0, 0, width, height, 0)
          \GdipCreateFromHDC(hdc, @graphics)
          DrawingMode(#PB_2DDrawing_AlphaBlend)
          \GdipDrawImageI(graphics, bitmap, 0, 0)
          StopDrawing()
          \GdipDeleteGraphics(graphics)
          ProcedureReturn image
        EndIf
      EndIf      
    EndWith
  EndIf
EndProcedure

Procedure GIFClass_FreeImage(*this.GIFClassTemplate, ID = #PB_Any)
  Protected found
  With *this
    ForEach \ImageObjects()
      If ID = #PB_Any
        \GdipDisposeImage(\ImageObjects()\bitmap)
        If IsImage(\ImageObjects()\ID)
          FreeImage(\ImageObjects()\ID)
        EndIf
        If \ImageObjects()\mem
          FreeMemory(\ImageObjects()\mem)
        EndIf
        If \ImageObjects()\mem2
          GlobalFree_(\ImageObjects()\mem2)
        EndIf
        DeleteElement(\ImageObjects())        
      ElseIf \ImageObjects()\ID = ID
        found = #True
        \GdipDisposeImage(\ImageObjects()\bitmap)
        If IsImage(ID)
          FreeImage(ID)
        EndIf
        If \ImageObjects()\mem
          FreeMemory(\ImageObjects()\mem)
        EndIf
        If \ImageObjects()\mem2
          GlobalFree_(\ImageObjects()\mem2)
        EndIf
        DeleteElement(\ImageObjects())
        Break
      EndIf
    Next
    If ID <> #PB_Any And found = #False
      If IsImage(ID)
        FreeImage(ID)
      EndIf
    EndIf
  EndWith
EndProcedure

Procedure GIFClass_GetFrame(*this.GIFClassTemplate, ID, Number.l)
  Protected hdc.i, graphics, image
  
  With *this
    ForEach \ImageObjects()
      If \ImageObjects()\ID = ID
        If Number > \ImageObjects()\count - 1
          ProcedureReturn 0
        EndIf
        \GdipImageSelectActiveFrame(\ImageObjects()\bitmap, \ImageObjects()\guid, Number)
        image = CreateImage(#PB_Any, \ImageObjects()\width, \ImageObjects()\height, 32)
        hdc = StartDrawing(ImageOutput(image))
        DrawingMode(#PB_2DDrawing_AlphaChannel)
        Box(0, 0, \ImageObjects()\width, \ImageObjects()\height, 0)
        \GdipCreateFromHDC(hdc, @graphics)
        DrawingMode(#PB_2DDrawing_AlphaBlend)
        \GdipDrawImageI(graphics, \ImageObjects()\bitmap, 0, 0)
        StopDrawing()
        \GdipDeleteGraphics(graphics)
        ProcedureReturn image
      EndIf
    Next
  EndWith  
EndProcedure

Procedure GIFClass_CountFrames(*this.GIFClassTemplate, ID)
  With *this
    ForEach \ImageObjects()
      If \ImageObjects()\ID = ID
        ProcedureReturn \ImageObjects()\count
      EndIf
    Next
  EndWith
EndProcedure

Procedure GIFClass_GetDelayTime(*this.GIFClassTemplate, ID, Number = 0)
  With *this
    ForEach \ImageObjects()
      If \ImageObjects()\ID = ID
        If Number > \ImageObjects()\count - 1
          ProcedureReturn 0
        EndIf
        \GdipImageSelectActiveFrame(\ImageObjects()\bitmap, \ImageObjects()\guid, Number)
        ProcedureReturn PeekL(\ImageObjects()\pos + (Number * SizeOf(Long))) * 10
      EndIf
    Next
  EndWith
EndProcedure

Procedure GIFClass_Destroy(*this.GIFClassTemplate)
  GIFClass_FreeImage(*this)
  *this\GdiplusShutdown(*this\Token)
  CloseLibrary(*this\hDLL)
  ClearStructure(*this, GIFClassTemplate)
  FreeMemory(*this)
EndProcedure

DataSection 
  VTable_GIFClass:
    Data.i @GIFClass_LoadImage()
    Data.i @GIFClass_CatchImage()
    Data.i @GIFClass_FreeImage()
    Data.i @GIFClass_GetFrame()
    Data.i @GIFClass_CountFrames()
    Data.i @GIFClass_GetDelayTime()
    ;
    Data.i @GIFClass_Destroy()
EndDataSection 
Im nächsten Beitrag das erste Beispiel.
Zuletzt geändert von ts-soft am 13.03.2012 15:44, insgesamt 7-mal geändert.
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 »

Beispiel:

Code: Alles auswählen

EnableExplicit

XIncludeFile "GIFObject.pbi"

Enumeration ; images
  #imgProgress
EndEnumeration

Enumeration ; gadgets
  #gadProgress
  #gadTrack
EndEnumeration

Enumeration ; windows
  #frmMain
EndEnumeration

Define.GIFObject Gifobj = NewGIFObject()
Define count, i, width, height

If Gifobj
  Gifobj\CatchImage(#imgProgress, ?rmtogmeh_gif_start, 4504)
  width = ImageWidth(#imgProgress)
  height = ImageHeight(#imgProgress)
  
  count = Gifobj\CountFrames(#imgProgress)
  Dim frames(count - 1)
  For i = 0 To count - 1
    frames(i) = Gifobj\GetFrame(#imgProgress, i)
  Next

  OpenWindow(#frmMain, #PB_Ignore, #PB_Ignore, width + 20, height + 20, "example")
  ImageGadget(#gadProgress, 10, 10, width, height, ImageID(frames(0)))
  TrackBarGadget(#gadTrack, width + 40, 10, 20, height, 0, count -1, #PB_TrackBar_Vertical)
   Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
      Case #PB_Event_Gadget
        If EventGadget() = #gadTrack
          SetGadgetState(#gadProgress, ImageID(frames(GetGadgetState(#gadTrack))))
        EndIf
    EndSelect
  ForEver
  
  Gifobj\Destroy()
EndIf

DataSection
  rmtogmeh_gif_start:
    ; size : 4504 bytes
    Data.q $002F613938464947,$FFFFFF0000910079,$00000201FE000000,$5354454E0BFF2100,$03302E3245504143
    Data.q $0404F92100000001,$0000002C00FF0007,$FF02000079002F00,$9C9E011DCBA98F84,$D36F5086A38BDAB4
    Data.q $9E8917E39218E071,$9ABCA2BA7B68965A,$1FF0DAFD6C6F4D35,$69F52E0CC430843B,$3213352A238E1A4D
    Data.q $154CECF1F4503D1D,$D5B865D1EBACE3D8,$983B11685E1292DE,$126FDAA5AE66AB15,$313E15A7AF72A64E
    Data.q $10C122C1C6971807,$B8883876D6E716C8,$73C7B90798E32378,$89A2637749B8F4B5,$67570504E9752896
    Data.q $A7267A7774A8F17A,$082962A816F493B6,$2BA6697B0A18E7E4,$59A43482E8A7DA2A,$07A8A7FC7B3419C9
    Data.q $26DCFD082C83FC58,$B999FD9C969A9684,$567A085D8A3D69DB,$16CB7E2A0249F914,$EAD56EBE3BCDA595
    Data.q $1BDC1C036E4EFA3C,$6105F6CF6A219C8D,$5126316241594DB4,$170F3133091066AA,$FF5B33553071F376
    Data.q $A248AD50B3F4C10A,$573127AAA0FEF846,$6C8873D9B8C28285,$761BE5685E91CB4D,$D4D63AFA8240CCD1
    Data.q $0A72DA2F2767B118,$D53343ABA6C9E7BD,$197844270C592A15,$8A360C8E9A639DCD,$4BA374A8CCF9DCA7
    Data.q $68F639BD58C1188B,$11E78CA1FF1B3ECA,$4A94F2755DB542A4,$05D6F169BBC36756,$E5DADFB84463D577
    Data.q $D8B8ACA86E4A5BA5,$36B6A7AA900AD541,$5F536D0FEC258EFB,$DBADB249CD4E8B2A,$0BE55BF5CE573FC1
    Data.q $1515446AC1A4BAB5,$FC9B7B2298C7A4B4,$7BF34D0848C8A81A,$57557AE1E7F7D89B,$0DA8A0E659788B54
    Data.q $B2E859E935FD1E65,$57E2A6B97D3F2D59,$6BA69965AD73536F,$78D4F7167B5EA6B9,$D83EE3CF4BA08E3E
    Data.q $4EA4EF6B23EC503B,$C7C16579FC7DC71C,$DCC494B34059BBE5,$85F97B1813656565,$74CBF70190571E91
    Data.q $8721866F60F6ED95,$75521B684D4A2FDA,$5F4655E35D1FC600,$9E1A7D6057ED6C2C,$6422D2D21E53A295
    Data.q $E34C65874D78B040,$618E6086F5F96C4C,$6108D5E559A0779D,$00984C9F19123084,$2B245932031F2368
    Data.q $8736217B87989562,$17175C180A312B51,$0FA5E20C381F6476,$95A648902531DA1F,$2D9986688898D8E3
    Data.q $F835274AE3D5F0BB,$7A0F1F23985316D4,$1599A9CF0E9FE16E,$821F0E681965D28F,$7DA8844E6C779085
    Data.q $8A568CA39B5769CA,$00015A9A1E9293E7,$000200070504F921,$06000E006C00182C,$19081F8410020000
    Data.q $ED49466B99DF0FED,$04F921000287394A,$00182C0002000705,$02000006000E006B,$8CFFED19081F8411
    Data.q $EB49652B3BC1743B,$070504F921000050,$006A00182C000200,$841002000006000E,$743B8CFFED19081F
    Data.q $0002CBB54AB18851,$000200070504F921,$06000E006900182C,$CA610F8411020000,$6313A90872DF0FE1
    Data.q $F92100155BE7984D,$182C000200070504,$000006000E006800,$0FE1CA610F841102,$984D6313A90872DF
    Data.q $0504F92100155BEF,$6700182C00020007,$1102000006000E00,$72DF0FE1CA610F84,$5BEF984D6313A908
    Data.q $00070504F9210015,$0E006600182C0002,$0F84110200000600,$A90872DF0FE1CA61,$00155BEF984D6313
    Data.q $000200070504F921,$06000E006500182C,$CA610F8411020000,$6313A90872DF0FE1,$F92100148F56FC5D
    Data.q $182C000200070504,$000006000E006400,$8F8BB1006F8C1102,$FC95670B329451D4,$0504F9210015B6EE
    Data.q $6300182C00020007,$1102000006000E00,$72DF0FE1CA610F84,$7F6EFC5D6313A908,$00070504F9210014
    Data.q $0E006200182C0002,$0F84110200000600,$1D4843E30FE1CA61,$000053F756DAE909,$000200070504F921
    Data.q $06000E006100182C,$CA610F8411020000,$EB0BC50872DF0FE1,$F92100005D274ADA,$182C000200070504
    Data.q $000006000E006000,$0FE1CA016F841102,$AB4EB313A908725F,$0504F92100005F62,$5F00182C00020007
    Data.q $1102000006000E00,$725F0FE1CA016F84,$5DE5BC4D6313A908,$00070504F9210000,$0E005E00182C0002
    Data.q $6F84110200000600,$A908725F0FE1CA01,$00147F6EFC4D6313,$000200070504F921,$06000E005D00182C
    Data.q $CA016F8411020000,$6313A908725F0FE1,$F92100147F6EFC4D,$182C000200070504,$000006000E005C00
    Data.q $0FE1CA016F841102,$ABC56313A908725F,$0504F92100148F6F,$5B00182C00020007,$1102000006000E00
    Data.q $725F0FE1CA016F84,$54EFABC56313A908,$00070504F9210015,$0E005A00182C0002,$7F8C120200000600
    Data.q $4E348ADA08E8AA10,$05457AEFABA552FB,$0200070504F92100,$000E005900182C00,$016F841102000006
    Data.q $13A908725F0FE1CA,$21001554EFABC563,$2C000200070504F9,$0006000E00580018,$E1CA016F84110200
    Data.q $5DE9091D4843E30F,$04F92100005A275C,$00182C0002000705,$02000006000E0057,$5F0FE1CA016F8411
    Data.q $EF4B61EB0BC50872,$070504F92100005A,$005600182C000200,$841102000006000E,$08725F0FE1CA016F
    Data.q $005ADAAB66B313A9,$0200070504F92100,$000E005500182C00,$016F841102000006,$13A908725F0FE1CA
    Data.q $2100148967ABC563,$2C000200070504F9,$0006000E00540018,$E1CA016F84110200,$C56313A908725F0F
    Data.q $04F921001554EFAB,$00182C0002000705,$02000006000E0053,$5F0FE1CA016F8411,$EFABC56313A90872
    Data.q $070504F921001554,$005200182C000200,$841102000006000E,$68438D0FEAB0117F,$005A4B5C6268F825
    Data.q $0200070504F92100,$000E005100182C00,$117F841102000006,$F82568438D0FEAB0,$2100005A4B5C6268
    Data.q $2C000200070504F9,$0006000E00500018,$7D9A018F8C110200,$5D692755539C0CB0,$04F92100005A6F5C
    Data.q $00182C0002000705,$02000006000E004F,$8D0FEAB0117F8411,$4B5C6268F8256843,$070504F92100005A
    Data.q $004E00182C000200,$840F02000006000E,$2B42210FEAB0117F,$21001669CB693745,$2C000200070504F9
    Data.q $0006000E004D0018,$EAB0117F840F0200,$CB6B47DA08438D0F,$070504F921001515,$004C00182C000200
    Data.q $841102000006000E,$68438D0FEAB0117F,$00535A9462B38825,$0200070504F92100,$000E004B00182C00
    Data.q $117F841102000006,$F82568438D0FEAB0,$21000053CF0C6D68,$2C000200070504F9,$0006000E004A0018
    Data.q $EAB0117F84100200,$6D68F82568438D0F,$0504F9210002A2BA,$4900182C00020007,$1002000006000E00
    Data.q $438D0FEAB0117F84,$02A2BA6D68F82568,$0200070504F92100,$000E004800182C00,$117F841002000006
    Data.q $F82568438D0FEAB0,$F9210002A2BA6D68,$182C000200070504,$000006000E004700,$0FEAB0117F841002
    Data.q $BA6D68F82568438D,$070504F9210002A2,$004600182C000200,$8C1102000006000E,$539C0CB07D9A018F
    Data.q $005A575695292755,$0200070504F92100,$000E004500182C00,$117F841002000006,$F82568438D0FEAB0
    Data.q $F9210002A2BA6D68,$182C000200070504,$000006000E004400,$0FEAB0117F840F02,$14CB6937452B4221
    Data.q $00070504F9210015,$0E004300182C0002,$7F840F0200000600,$DA08438D0FEAB011,$F921001515CB6B47
    Data.q $182C000200070504,$000006000E004200,$0FEAB0117F841102,$9462B3882568438D,$0504F9210000535A
    Data.q $4100182C00020007,$1102000006000E00,$438D0FEAB0117F84,$53CF0C6D68F82568,$00070504F9210000
    Data.q $0E004000182C0002,$7F84100200000600,$2568438D0FEAB011,$210002A2BA6D68F8,$2C000200070504F9
    Data.q $0006000E003F0018,$EAB0117F84100200,$6D68F82568438D0F,$0504F9210002A2BA,$3E00182C00020007
    Data.q $1002000006000E00,$438D0FEAB0117F84,$02A2BA6D68F82568,$0200070504F92100,$000E003D00182C00
    Data.q $117F841002000006,$F82568438D0FEAB0,$F9210002A2BA6D68,$182C000200070504,$000006000E003C00
    Data.q $B07D9A018F8C1102,$5695292755539C0C,$0504F92100005A57,$3A00182C00020007,$1102000007000E00
    Data.q $42210FEAB0117F84,$6AE794CB6937452B,$00070504F9210014,$0E003900182C0002,$7F840F0200000600
    Data.q $DA08438D0FEAB011,$F921001515CB6B47,$182C000200070504,$000006000E003800,$0FEAB0117F841102
    Data.q $9462B3882568438D,$0504F9210000535A,$3700182C00020007,$1102000006000E00,$438D0FEAB0117F84
    Data.q $53CF0C6D68F82568,$00070504F9210000,$0E003600182C0002,$7F84100200000600,$2568438D0FEAB011
    Data.q $210002A2BA6D68F8,$2C000200070504F9,$0006000E00350018,$EAB0117F84100200,$6D68F82568438D0F
    Data.q $0504F9210002A2BA,$3400182C00020007,$1002000006000E00,$438D0FEAB0117F84,$02A2BA6D68F82568
    Data.q $0200070504F92100,$000E003300182C00,$117F841002000006,$F82568438D0FEAB0,$F9210002A2BA6D68
    Data.q $182C000200070504,$000006000E003200,$B07D9A018F8C1102,$5695292755539C0C,$0504F92100005A57
    Data.q $3100182C00020007,$1002000006000E00,$438D0FEAB0117F84,$02A2BA6D68F82568,$0200070504F92100
    Data.q $000E003000182C00,$117F840F02000006,$37452B42210FEAB0,$04F921001514CB69,$00182C0002000705
    Data.q $02000006000E002F,$8D0FEAB0117F840F,$1515CB6B47DA0843,$0200070504F92100,$000E002E00182C00
    Data.q $117F841102000006,$882568438D0FEAB0,$210000535A9462B3,$2C000200070504F9,$0006000E002D0018
    Data.q $EAB0117F84110200,$6D68F82568438D0F,$04F921000053CF0C,$00182C0002000705,$02000006000E002C
    Data.q $8D0FEAB0117F8410,$A2BA6D68F8256843,$00070504F9210002,$0E002B00182C0002,$7F84100200000600
    Data.q $2568438D0FEAB011,$210002A2BA6D68F8,$2C000200070504F9,$0006000E002A0018,$EAB0117F84100200
    Data.q $6D68F82568438D0F,$0504F9210002A2BA,$2900182C00020007,$1002000006000E00,$438D0FEAB0117F84
    Data.q $02A2BA6D68F82568,$0200070504F92100,$000E002800182C00,$018F8C1102000006,$2755539C0CB07D9A
    Data.q $2100005A57569529,$2C000200070504F9,$0006000E00270018,$EAB0117F84100200,$6D68F82568438D0F
    Data.q $0504F9210002A2BA,$2600182C00020007,$1002000006000E00,$43E30FE1CA016F84,$02A2BA6569091D48
    Data.q $0200070504F92100,$000E002500182C00,$016F841002000006,$0BC508725F0FE1CA,$F9210002A2DA65AB
    Data.q $182C000200070504,$000006000E002400,$0FE1CA016F841102,$B796B313A908725F,$0504F92100005462
    Data.q $2300182C00020007,$1102000006000E00,$725F0FE1CA016F84,$79656CB56313A908,$00070504F9210014
    Data.q $0E002200182C0002,$6F84110200000600,$A908725F0FE1CA01,$00147E6FABC56313,$000200070504F921
    Data.q $06000E002100182C,$CA016F8411020000,$6313A908725F0FE1,$F921001554EFABC5,$182C000200070504
    Data.q $000006000E002000,$0FE1CA016F841102,$ABC56313A908725F,$0504F921001554EF,$1F00182C00020007
    Data.q $1102000006000E00,$725F0FE1CA016F84,$54EFABC56313A908,$00070504F9210015,$0E001E00182C0002
    Data.q $7F8C120200000600,$4E348ADA08E8AA10,$05457AEFABA552FB,$0200070504F92100,$000E001D00182C00
    Data.q $016F841102000006,$13A908725F0FE1CA,$21001554EFABC563,$2C000200070504F9,$0006000E001C0018
    Data.q $E1CA016F84110200,$5DE9091D4843E30F,$04F92100005A275C,$00182C0002000705,$02000006000E001B
    Data.q $5F0FE1CA016F8411,$EF4B61EB0BC50872,$070504F92100005A,$001A00182C000200,$841102000006000E
    Data.q $08725F0FE1CA016F,$005ADAAB66B313A9,$0200070504F92100,$000E001900182C00,$016F841102000006
    Data.q $13A908725F0FE1CA,$2100148967ABC563,$2C000200070504F9,$0006000E00180018,$E1CA610F84110200
    Data.q $C56313A90872DF0F,$04F921001555EFA9,$00182C0002000705,$02000006000E0017,$DF0FE1CA610F8411
    Data.q $EFA9C56313A90872,$070504F921001555,$001600182C000200,$841102000006000E,$0872DF0FE1CA610F
    Data.q $1555EFA9C56313A9,$0200070504F92100,$000E001500182C00,$610F841102000006,$13A90872DF0FE1CA
    Data.q $21001555EFA9C563,$2C000200070504F9,$0006000E00140018,$8BB1006F8C110200,$95670B329451D48F
    Data.q $04F92100155E6EFC,$00182C0002000705,$02000006000E0013,$DF0FE1CA610F8411,$6EFC5D6313A90872
    Data.q $070504F92100147F,$001200182C000200,$841102000006000E,$4843E30FE1CA610F,$0053F756DAE9091D
    Data.q $0200070504F92100,$000E001100182C00,$610F841102000006,$0BC50872DF0FE1CA,$2100005D274ADAEB
    Data.q $2C000200070504F9,$0006000E00100018,$E1CA610F84110200,$5EB313A90872DF0F,$04F92100005F62A9
    Data.q $00182C0002000705,$02000006000E000F,$8CFFED19081F8411,$A70CDCAB0851743B,$070504F92100005A
    Data.q $000E00182C000200,$841102000006000E,$743B8CFFED19081F,$005ADB49DCAB0851,$0200070504F92100
    Data.q $000E000D00182C00,$081F841102000006,$0851743B8CFFED19,$2100005ADB49DCAB,$2C000200070504F9
    Data.q $0006000E000C0018,$ED19081F84110200,$DCAB0851743B8CFF,$04F92100005ADB49,$00182C0002000705
    Data.q $02000006000E000B,$8CFFED19081F8411,$A75B95AB0851743B,$070504F92100005A,$000A00182C000200
    Data.q $8C1102000006000E,$74531A8FE7B1090F,$149D56CC55E8E826,$0200070504F92100,$000E000900182C00
    Data.q $018F841102000006,$46C1294316AFEDC1,$3B000054769151D7
  rmtogmeh_gif_end:
EndDataSection
Würde mich über Feedback freuen, auch Bugreports sind erwünscht :mrgreen:

Gruß
Thomas

// edit
Besseres Beispiel
Kleines Update:
History hat geschrieben:; 1.1
; added optional backcolor to LoadImage() and CatchImage()
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
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Re: GIFObject (windows only)

Beitrag von SoS »

ts-soft hat geschrieben: // edit
Besseres Beispiel
:lol: Genau so hab ich mir das vorgestellt,genauer testen werd ichs wenn ich wieder wach bin. :allright:
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 »

Dann habe ich Dich ja richtig verstanden :wink:

PS: Du kannst mit ein und demselben Object auch mehrere GIFs laden, aber jeweils mit anderer ID.
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
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: GIFObject (windows only)

Beitrag von rolaf »

Dasja genial. :o

Jetzt noch ne Möglichkeit einzelne Bilder bzw. Frames als neues GIF abzuspeichern und einem Animationsshop steht nichts mehr im Wege.
:::: WIN 10 :: PB 5.73 :: (x64) ::::
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 »

rolaf hat geschrieben:Jetzt noch ne Möglichkeit einzelne Bilder bzw. Frames als neues GIF abzuspeichern und einem Animationsshop steht nichts mehr im Wege.
GIF als Einzelbild speichern sollte leicht umzusetzen sein, aber als animiertes GIF
halte ich im moment für unwahrscheinlich, das ich das Umsetzen kann.
Also auf Animationsshop würde ich erstmal nicht hoffen /:->

Gruß
Thomas
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
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Re: GIFObject (windows only)

Beitrag von SoS »

ts-soft hat geschrieben: PS: Du kannst mit ein und demselben Object auch mehrere GIFs laden, aber jeweils mit anderer ID.
Ähm,muss man dann nich auch die Anzahl der Frames anpassen wenn die unterschiedlich sind ?
Ich habe mal der Einfachheit halber 6x das selbe Gif geladen (ich weiss das es nicht
notwendig ist) um das mal was zu testen.

Code: Alles auswählen

EnableExplicit

XIncludeFile "GIBObject.pbi"

Enumeration ; images
  #imgProgress0 = 0
  #imgProgress1
  #imgProgress2
  #imgProgress3
  #imgProgress4
  #imgProgress5
EndEnumeration

Enumeration ; gadgets
  #gadProgress0 = 0
  #gadProgress1 = 1
  #gadProgress2 = 2
  #gadProgress3 = 3
  #gadProgress4 = 4
  #gadProgress5 = 5
  #gadTrack0 = 6
  #gadTrack1 = 7
  #gadTrack2 = 8
  #gadTrack3 = 9
  #gadTrack4 = 10
  #gadTrack5 = 11
EndEnumeration

Enumeration ; windows
  #frmMain
EndEnumeration

Define go= 5 ,xgo

Dim Gifobj.GIFObject(go); array für objekte

For xgo=0 To go
  Gifobj(xgo) = NewGIFObject()
  If Not Gifobj(xgo)
    End
  EndIf
Next

Define count, i, width, height

Dim frames(go,1); array für frames

For xgo=0 To go
  Gifobj(xgo)\CatchImage(#imgProgress0 + xgo, ?rmtogmeh_gif_start, 4504)
  width = ImageWidth(#imgProgress0 + xgo)
  height = ImageHeight(#imgProgress0 + xgo)
  
  count = Gifobj(xgo)\CountFrames(#imgProgress0 + xgo)
  ReDim frames(go , count - 1)
  For i = 0 To count - 1
    frames(xgo , i) = Gifobj(xgo)\GetFrame(#imgProgress0 + xgo, i)
  Next
Next

OpenWindow(#frmMain, #PB_Ignore, #PB_Ignore, (width + 35) * go, height + 20, "example")
For xgo = 0 To go
  ImageGadget(#gadProgress0 + xgo, (xgo*(width+20)), 10, width, height, ImageID(frames(xgo , 0)))
  TrackBarGadget(#gadTrack0 + xgo, width +((width + 20)*xgo), 10, 20, height, 0, count -1, #PB_TrackBar_Vertical)
Next

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_Gadget
      For xgo = 0 To go
        If EventGadget() = #gadTrack0 + xgo
          SetGadgetState(#gadProgress0 + xgo, ImageID(frames(xgo , GetGadgetState(#gadTrack0 + xgo))))
        EndIf
      Next
  EndSelect
ForEver
For xgo=0 To go 
  Gifobj(xgo)\Destroy()
Next


DataSection
  rmtogmeh_gif_start:
  ; size : 4504 bytes
  Data.q $002F613938464947,$FFFFFF0000910079,$00000201FE000000,$5354454E0BFF2100,$03302E3245504143
  Data.q $0404F92100000001,$0000002C00FF0007,$FF02000079002F00,$9C9E011DCBA98F84,$D36F5086A38BDAB4
  Data.q $9E8917E39218E071,$9ABCA2BA7B68965A,$1FF0DAFD6C6F4D35,$69F52E0CC430843B,$3213352A238E1A4D
  Data.q $154CECF1F4503D1D,$D5B865D1EBACE3D8,$983B11685E1292DE,$126FDAA5AE66AB15,$313E15A7AF72A64E
  Data.q $10C122C1C6971807,$B8883876D6E716C8,$73C7B90798E32378,$89A2637749B8F4B5,$67570504E9752896
  Data.q $A7267A7774A8F17A,$082962A816F493B6,$2BA6697B0A18E7E4,$59A43482E8A7DA2A,$07A8A7FC7B3419C9
  Data.q $26DCFD082C83FC58,$B999FD9C969A9684,$567A085D8A3D69DB,$16CB7E2A0249F914,$EAD56EBE3BCDA595
  Data.q $1BDC1C036E4EFA3C,$6105F6CF6A219C8D,$5126316241594DB4,$170F3133091066AA,$FF5B33553071F376
  Data.q $A248AD50B3F4C10A,$573127AAA0FEF846,$6C8873D9B8C28285,$761BE5685E91CB4D,$D4D63AFA8240CCD1
  Data.q $0A72DA2F2767B118,$D53343ABA6C9E7BD,$197844270C592A15,$8A360C8E9A639DCD,$4BA374A8CCF9DCA7
  Data.q $68F639BD58C1188B,$11E78CA1FF1B3ECA,$4A94F2755DB542A4,$05D6F169BBC36756,$E5DADFB84463D577
  Data.q $D8B8ACA86E4A5BA5,$36B6A7AA900AD541,$5F536D0FEC258EFB,$DBADB249CD4E8B2A,$0BE55BF5CE573FC1
  Data.q $1515446AC1A4BAB5,$FC9B7B2298C7A4B4,$7BF34D0848C8A81A,$57557AE1E7F7D89B,$0DA8A0E659788B54
  Data.q $B2E859E935FD1E65,$57E2A6B97D3F2D59,$6BA69965AD73536F,$78D4F7167B5EA6B9,$D83EE3CF4BA08E3E
  Data.q $4EA4EF6B23EC503B,$C7C16579FC7DC71C,$DCC494B34059BBE5,$85F97B1813656565,$74CBF70190571E91
  Data.q $8721866F60F6ED95,$75521B684D4A2FDA,$5F4655E35D1FC600,$9E1A7D6057ED6C2C,$6422D2D21E53A295
  Data.q $E34C65874D78B040,$618E6086F5F96C4C,$6108D5E559A0779D,$00984C9F19123084,$2B245932031F2368
  Data.q $8736217B87989562,$17175C180A312B51,$0FA5E20C381F6476,$95A648902531DA1F,$2D9986688898D8E3
  Data.q $F835274AE3D5F0BB,$7A0F1F23985316D4,$1599A9CF0E9FE16E,$821F0E681965D28F,$7DA8844E6C779085
  Data.q $8A568CA39B5769CA,$00015A9A1E9293E7,$000200070504F921,$06000E006C00182C,$19081F8410020000
  Data.q $ED49466B99DF0FED,$04F921000287394A,$00182C0002000705,$02000006000E006B,$8CFFED19081F8411
  Data.q $EB49652B3BC1743B,$070504F921000050,$006A00182C000200,$841002000006000E,$743B8CFFED19081F
  Data.q $0002CBB54AB18851,$000200070504F921,$06000E006900182C,$CA610F8411020000,$6313A90872DF0FE1
  Data.q $F92100155BE7984D,$182C000200070504,$000006000E006800,$0FE1CA610F841102,$984D6313A90872DF
  Data.q $0504F92100155BEF,$6700182C00020007,$1102000006000E00,$72DF0FE1CA610F84,$5BEF984D6313A908
  Data.q $00070504F9210015,$0E006600182C0002,$0F84110200000600,$A90872DF0FE1CA61,$00155BEF984D6313
  Data.q $000200070504F921,$06000E006500182C,$CA610F8411020000,$6313A90872DF0FE1,$F92100148F56FC5D
  Data.q $182C000200070504,$000006000E006400,$8F8BB1006F8C1102,$FC95670B329451D4,$0504F9210015B6EE
  Data.q $6300182C00020007,$1102000006000E00,$72DF0FE1CA610F84,$7F6EFC5D6313A908,$00070504F9210014
  Data.q $0E006200182C0002,$0F84110200000600,$1D4843E30FE1CA61,$000053F756DAE909,$000200070504F921
  Data.q $06000E006100182C,$CA610F8411020000,$EB0BC50872DF0FE1,$F92100005D274ADA,$182C000200070504
  Data.q $000006000E006000,$0FE1CA016F841102,$AB4EB313A908725F,$0504F92100005F62,$5F00182C00020007
  Data.q $1102000006000E00,$725F0FE1CA016F84,$5DE5BC4D6313A908,$00070504F9210000,$0E005E00182C0002
  Data.q $6F84110200000600,$A908725F0FE1CA01,$00147F6EFC4D6313,$000200070504F921,$06000E005D00182C
  Data.q $CA016F8411020000,$6313A908725F0FE1,$F92100147F6EFC4D,$182C000200070504,$000006000E005C00
  Data.q $0FE1CA016F841102,$ABC56313A908725F,$0504F92100148F6F,$5B00182C00020007,$1102000006000E00
  Data.q $725F0FE1CA016F84,$54EFABC56313A908,$00070504F9210015,$0E005A00182C0002,$7F8C120200000600
  Data.q $4E348ADA08E8AA10,$05457AEFABA552FB,$0200070504F92100,$000E005900182C00,$016F841102000006
  Data.q $13A908725F0FE1CA,$21001554EFABC563,$2C000200070504F9,$0006000E00580018,$E1CA016F84110200
  Data.q $5DE9091D4843E30F,$04F92100005A275C,$00182C0002000705,$02000006000E0057,$5F0FE1CA016F8411
  Data.q $EF4B61EB0BC50872,$070504F92100005A,$005600182C000200,$841102000006000E,$08725F0FE1CA016F
  Data.q $005ADAAB66B313A9,$0200070504F92100,$000E005500182C00,$016F841102000006,$13A908725F0FE1CA
  Data.q $2100148967ABC563,$2C000200070504F9,$0006000E00540018,$E1CA016F84110200,$C56313A908725F0F
  Data.q $04F921001554EFAB,$00182C0002000705,$02000006000E0053,$5F0FE1CA016F8411,$EFABC56313A90872
  Data.q $070504F921001554,$005200182C000200,$841102000006000E,$68438D0FEAB0117F,$005A4B5C6268F825
  Data.q $0200070504F92100,$000E005100182C00,$117F841102000006,$F82568438D0FEAB0,$2100005A4B5C6268
  Data.q $2C000200070504F9,$0006000E00500018,$7D9A018F8C110200,$5D692755539C0CB0,$04F92100005A6F5C
  Data.q $00182C0002000705,$02000006000E004F,$8D0FEAB0117F8411,$4B5C6268F8256843,$070504F92100005A
  Data.q $004E00182C000200,$840F02000006000E,$2B42210FEAB0117F,$21001669CB693745,$2C000200070504F9
  Data.q $0006000E004D0018,$EAB0117F840F0200,$CB6B47DA08438D0F,$070504F921001515,$004C00182C000200
  Data.q $841102000006000E,$68438D0FEAB0117F,$00535A9462B38825,$0200070504F92100,$000E004B00182C00
  Data.q $117F841102000006,$F82568438D0FEAB0,$21000053CF0C6D68,$2C000200070504F9,$0006000E004A0018
  Data.q $EAB0117F84100200,$6D68F82568438D0F,$0504F9210002A2BA,$4900182C00020007,$1002000006000E00
  Data.q $438D0FEAB0117F84,$02A2BA6D68F82568,$0200070504F92100,$000E004800182C00,$117F841002000006
  Data.q $F82568438D0FEAB0,$F9210002A2BA6D68,$182C000200070504,$000006000E004700,$0FEAB0117F841002
  Data.q $BA6D68F82568438D,$070504F9210002A2,$004600182C000200,$8C1102000006000E,$539C0CB07D9A018F
  Data.q $005A575695292755,$0200070504F92100,$000E004500182C00,$117F841002000006,$F82568438D0FEAB0
  Data.q $F9210002A2BA6D68,$182C000200070504,$000006000E004400,$0FEAB0117F840F02,$14CB6937452B4221
  Data.q $00070504F9210015,$0E004300182C0002,$7F840F0200000600,$DA08438D0FEAB011,$F921001515CB6B47
  Data.q $182C000200070504,$000006000E004200,$0FEAB0117F841102,$9462B3882568438D,$0504F9210000535A
  Data.q $4100182C00020007,$1102000006000E00,$438D0FEAB0117F84,$53CF0C6D68F82568,$00070504F9210000
  Data.q $0E004000182C0002,$7F84100200000600,$2568438D0FEAB011,$210002A2BA6D68F8,$2C000200070504F9
  Data.q $0006000E003F0018,$EAB0117F84100200,$6D68F82568438D0F,$0504F9210002A2BA,$3E00182C00020007
  Data.q $1002000006000E00,$438D0FEAB0117F84,$02A2BA6D68F82568,$0200070504F92100,$000E003D00182C00
  Data.q $117F841002000006,$F82568438D0FEAB0,$F9210002A2BA6D68,$182C000200070504,$000006000E003C00
  Data.q $B07D9A018F8C1102,$5695292755539C0C,$0504F92100005A57,$3A00182C00020007,$1102000007000E00
  Data.q $42210FEAB0117F84,$6AE794CB6937452B,$00070504F9210014,$0E003900182C0002,$7F840F0200000600
  Data.q $DA08438D0FEAB011,$F921001515CB6B47,$182C000200070504,$000006000E003800,$0FEAB0117F841102
  Data.q $9462B3882568438D,$0504F9210000535A,$3700182C00020007,$1102000006000E00,$438D0FEAB0117F84
  Data.q $53CF0C6D68F82568,$00070504F9210000,$0E003600182C0002,$7F84100200000600,$2568438D0FEAB011
  Data.q $210002A2BA6D68F8,$2C000200070504F9,$0006000E00350018,$EAB0117F84100200,$6D68F82568438D0F
  Data.q $0504F9210002A2BA,$3400182C00020007,$1002000006000E00,$438D0FEAB0117F84,$02A2BA6D68F82568
  Data.q $0200070504F92100,$000E003300182C00,$117F841002000006,$F82568438D0FEAB0,$F9210002A2BA6D68
  Data.q $182C000200070504,$000006000E003200,$B07D9A018F8C1102,$5695292755539C0C,$0504F92100005A57
  Data.q $3100182C00020007,$1002000006000E00,$438D0FEAB0117F84,$02A2BA6D68F82568,$0200070504F92100
  Data.q $000E003000182C00,$117F840F02000006,$37452B42210FEAB0,$04F921001514CB69,$00182C0002000705
  Data.q $02000006000E002F,$8D0FEAB0117F840F,$1515CB6B47DA0843,$0200070504F92100,$000E002E00182C00
  Data.q $117F841102000006,$882568438D0FEAB0,$210000535A9462B3,$2C000200070504F9,$0006000E002D0018
  Data.q $EAB0117F84110200,$6D68F82568438D0F,$04F921000053CF0C,$00182C0002000705,$02000006000E002C
  Data.q $8D0FEAB0117F8410,$A2BA6D68F8256843,$00070504F9210002,$0E002B00182C0002,$7F84100200000600
  Data.q $2568438D0FEAB011,$210002A2BA6D68F8,$2C000200070504F9,$0006000E002A0018,$EAB0117F84100200
  Data.q $6D68F82568438D0F,$0504F9210002A2BA,$2900182C00020007,$1002000006000E00,$438D0FEAB0117F84
  Data.q $02A2BA6D68F82568,$0200070504F92100,$000E002800182C00,$018F8C1102000006,$2755539C0CB07D9A
  Data.q $2100005A57569529,$2C000200070504F9,$0006000E00270018,$EAB0117F84100200,$6D68F82568438D0F
  Data.q $0504F9210002A2BA,$2600182C00020007,$1002000006000E00,$43E30FE1CA016F84,$02A2BA6569091D48
  Data.q $0200070504F92100,$000E002500182C00,$016F841002000006,$0BC508725F0FE1CA,$F9210002A2DA65AB
  Data.q $182C000200070504,$000006000E002400,$0FE1CA016F841102,$B796B313A908725F,$0504F92100005462
  Data.q $2300182C00020007,$1102000006000E00,$725F0FE1CA016F84,$79656CB56313A908,$00070504F9210014
  Data.q $0E002200182C0002,$6F84110200000600,$A908725F0FE1CA01,$00147E6FABC56313,$000200070504F921
  Data.q $06000E002100182C,$CA016F8411020000,$6313A908725F0FE1,$F921001554EFABC5,$182C000200070504
  Data.q $000006000E002000,$0FE1CA016F841102,$ABC56313A908725F,$0504F921001554EF,$1F00182C00020007
  Data.q $1102000006000E00,$725F0FE1CA016F84,$54EFABC56313A908,$00070504F9210015,$0E001E00182C0002
  Data.q $7F8C120200000600,$4E348ADA08E8AA10,$05457AEFABA552FB,$0200070504F92100,$000E001D00182C00
  Data.q $016F841102000006,$13A908725F0FE1CA,$21001554EFABC563,$2C000200070504F9,$0006000E001C0018
  Data.q $E1CA016F84110200,$5DE9091D4843E30F,$04F92100005A275C,$00182C0002000705,$02000006000E001B
  Data.q $5F0FE1CA016F8411,$EF4B61EB0BC50872,$070504F92100005A,$001A00182C000200,$841102000006000E
  Data.q $08725F0FE1CA016F,$005ADAAB66B313A9,$0200070504F92100,$000E001900182C00,$016F841102000006
  Data.q $13A908725F0FE1CA,$2100148967ABC563,$2C000200070504F9,$0006000E00180018,$E1CA610F84110200
  Data.q $C56313A90872DF0F,$04F921001555EFA9,$00182C0002000705,$02000006000E0017,$DF0FE1CA610F8411
  Data.q $EFA9C56313A90872,$070504F921001555,$001600182C000200,$841102000006000E,$0872DF0FE1CA610F
  Data.q $1555EFA9C56313A9,$0200070504F92100,$000E001500182C00,$610F841102000006,$13A90872DF0FE1CA
  Data.q $21001555EFA9C563,$2C000200070504F9,$0006000E00140018,$8BB1006F8C110200,$95670B329451D48F
  Data.q $04F92100155E6EFC,$00182C0002000705,$02000006000E0013,$DF0FE1CA610F8411,$6EFC5D6313A90872
  Data.q $070504F92100147F,$001200182C000200,$841102000006000E,$4843E30FE1CA610F,$0053F756DAE9091D
  Data.q $0200070504F92100,$000E001100182C00,$610F841102000006,$0BC50872DF0FE1CA,$2100005D274ADAEB
  Data.q $2C000200070504F9,$0006000E00100018,$E1CA610F84110200,$5EB313A90872DF0F,$04F92100005F62A9
  Data.q $00182C0002000705,$02000006000E000F,$8CFFED19081F8411,$A70CDCAB0851743B,$070504F92100005A
  Data.q $000E00182C000200,$841102000006000E,$743B8CFFED19081F,$005ADB49DCAB0851,$0200070504F92100
  Data.q $000E000D00182C00,$081F841102000006,$0851743B8CFFED19,$2100005ADB49DCAB,$2C000200070504F9
  Data.q $0006000E000C0018,$ED19081F84110200,$DCAB0851743B8CFF,$04F92100005ADB49,$00182C0002000705
  Data.q $02000006000E000B,$8CFFED19081F8411,$A75B95AB0851743B,$070504F92100005A,$000A00182C000200
  Data.q $8C1102000006000E,$74531A8FE7B1090F,$149D56CC55E8E826,$0200070504F92100,$000E000900182C00
  Data.q $018F841102000006,$46C1294316AFEDC1,$3B000054769151D7
  rmtogmeh_gif_end:
EndDataSection
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 unterschiedliche GIFs hast, solltest Du auch für jedes GIF separat die Frames usw. ermitteln.
PS: Destroy() ist für das Objekt, also nur einmal für alle, ansonsten FreeImage nutzen für die HauptID
und die PB Funktion FreeImage für die Frames (die werden nur von PB verwaltet, weil die keine Extra-Informationen
benötigen). Die Lib verwaltet nur die mit Catch oder Load zurückgegebenen Images, nicht die mit GetFrame.

Hoffe das ist verständlich.

Gruß
Thomas
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
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Re: GIFObject (windows only)

Beitrag von SoS »

ts-soft hat geschrieben: PS: Destroy() ist für das Objekt, also nur einmal für alle, ansonsten FreeImage nutzen für die HauptID
und die PB Funktion FreeImage für die Frames (die werden nur von PB verwaltet, weil die keine Extra-Informationen
benötigen).
Aha,ich dachte ich muss jedes einzellne Objekt mit Destroy() löschen.
Ich hatte mit 20 getestet , hab aber wieder auf 6 reduziert. Sah zu extrem aus. :mrgreen:
Antworten