GIFObject (windows only)
- 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)
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!
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- 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)
Der Code:
[GIBObject.pbi]
Im nächsten Beitrag das erste Beispiel.
[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
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- 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)
Beispiel:
Würde mich über Feedback freuen, auch Bugreports sind erwünscht
Gruß
Thomas
// edit
Besseres Beispiel
Kleines Update:
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

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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: GIFObject (windows only)
ts-soft hat geschrieben: // edit
Besseres Beispiel


- 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)
Dann habe ich Dich ja richtig verstanden
PS: Du kannst mit ein und demselben Object auch mehrere GIFs laden, aber jeweils mit anderer ID.

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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: GIFObject (windows only)
Dasja genial.
Jetzt noch ne Möglichkeit einzelne Bilder bzw. Frames als neues GIF abzuspeichern und einem Animationsshop steht nichts mehr im Wege.

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) ::::
- 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)
GIF als Einzelbild speichern sollte leicht umzusetzen sein, aber als animiertes GIFrolaf hat geschrieben:Jetzt noch ne Möglichkeit einzelne Bilder bzw. Frames als neues GIF abzuspeichern und einem Animationsshop steht nichts mehr im Wege.
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: GIFObject (windows only)
Ähm,muss man dann nich auch die Anzahl der Frames anpassen wenn die unterschiedlich sind ?ts-soft hat geschrieben: PS: Du kannst mit ein und demselben Object auch mehrere GIFs laden, aber jeweils mit anderer ID.
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
- 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)
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
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: GIFObject (windows only)
Aha,ich dachte ich muss jedes einzellne Objekt mit Destroy() löschen.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).
Ich hatte mit 20 getestet , hab aber wieder auf 6 reduziert. Sah zu extrem aus.
