vielen Dank für die interessanten Beiträge aber die Beispiele sind mir einfach zu unübersichtlich und so habe ich mich entschlossen, vorerst jedenfalls, die manipulierte GIF-Datei mit dem Programm GIF-X zu erstellen. Vorab aber zerlege ich eine GIF-Datei in Ihre verschiedenen Frame, ändere diese und speichere jeden Frame als PNG-Datei extra ab. Diese Bilder setze ich mit dem GIF-X Programm wieder als GIF-Datei zusammen. Anbei wollte ich jedenfalls Euch an meinem Source teilhaben lassen falls jemand doch noch einmal etwas ähnliches braucht. Man sollte ja auch einmal etwas zurückgeben.
Code: Alles auswählen
; GIF-Manipulation
; auf bestehende GIF's
;~~~~~~~~~~~~~~~~~~~~~~
EnableExplicit
UseGIFImageDecoder()
UsePNGImageEncoder()
Enumeration
#mainWindows
#mainCanvas
#mainTimer
#mainImage
#mainFont
EndEnumeration
#gifFile = "GIF-Original.gif"
#NewText = "Test"
Procedure GIF_originalViewer(vFrame.i=#PB_Any)
Protected pEvent.i, pFrame.i, pZaehler.i, pValue.s = Left(#NewText, 1)
Protected pFont.i = LoadFont(#mainFont, "Curier New", 60)
If LoadImage(#mainImage, #gifFile)
If OpenWindow(#mainWindows, 100, 100, ImageWidth(#mainImage), ImageHeight(#mainImage), "GIF viewer")
CanvasGadget(#mainCanvas, 0, 0, ImageWidth(#mainImage), ImageHeight(#mainImage))
AddWindowTimer(#mainWindows, #mainTimer, 1)
If (vFrame<#False): vFrame = ImageFrameCount(#mainImage) + 1: EndIf
Repeat
pEvent = WaitWindowEvent()
If pEvent = #PB_Event_Timer
SetImageFrame(#mainImage, pFrame)
RemoveWindowTimer(#mainWindows, #mainTimer)
AddWindowTimer(#mainWindows, #mainTimer, GetImageFrameDelay(#mainImage))
If StartDrawing(CanvasOutput(#mainCanvas))
DrawImage(ImageID(#mainImage), 0, 0)
If (pFrame>vFrame)
DrawingFont(pFont)
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(120, 0, pValue)
pZaehler + 1
EndIf
Select pZaehler
Case 5: pValue + Mid(#NewText, 2, 1)
Case 10: pValue + Mid(#NewText, 3, 1)
Case 15: pValue + Mid(#NewText, 4, 1)
EndSelect
StopDrawing()
EndIf
pFrame + 1
If (pFrame=ImageFrameCount(#mainImage))
pFrame = 0: pZaehler = 0: pValue = Left(#NewText, 1)
EndIf
EndIf
Until (pEvent = #PB_Event_CloseWindow)
CloseWindow(#mainWindows)
EndIf
Else
Debug "Kann die Datei nicht laden: " + #gifFile
EndIf
EndProcedure
Procedure GIF_Save()
Protected pValue.s, pFrame.i, pMax.i = (ImageFrameCount(#mainImage) - 1)
For pFrame=0 To pMax
SetImageFrame(#mainImage, pFrame)
pValue = Str(GetImageFrameDelay(#mainImage))+ "-Frame" + RSet(Str(pFrame), 2, "0") + ".png"
SaveImage(#mainImage, pValue, #PB_ImagePlugin_PNG)
Next
EndProcedure
Procedure GIF_Viewer(vFlag.a)
Protected pEvent.i, pFrame.i, pFont.i, pZaehler.i
If OpenWindow(#mainWindows, 100, 100, ImageWidth(#mainImage), ImageHeight(#mainImage), "GIF viewer")
CanvasGadget(#mainCanvas, 0, 0, ImageWidth(#mainImage), ImageHeight(#mainImage))
AddWindowTimer(#mainWindows, #mainTimer, 1)
Repeat
pEvent = WaitWindowEvent()
If pEvent = #PB_Event_Timer
SetImageFrame(#mainImage, pFrame)
RemoveWindowTimer(#mainWindows, #mainTimer)
AddWindowTimer(#mainWindows, #mainTimer, GetImageFrameDelay(#mainImage))
If StartDrawing(CanvasOutput(#mainCanvas))
DrawImage(ImageID(#mainImage), 0, 0)
StopDrawing()
EndIf
pFrame+1
If (pFrame>=ImageFrameCount(#mainImage))
pFrame = 0: pZaehler = 0
If vFlag: Break: EndIf
EndIf
EndIf
Until (pEvent = #PB_Event_CloseWindow)
CloseWindow(#mainWindows)
Else
Debug "Kann die Datei nicht laden: " + #gifFile
EndIf
EndProcedure
Procedure GIF_testViewer(vFrame.i=#PB_Any, vSave.a = #False)
Protected pEvent.i, pFrame.i, pZaehler.i, pValue.s = Left(#NewText, 1)
Protected pFont.i = LoadFont(#mainFont, "Curier New", 60)
If LoadImage(#mainImage, #gifFile)
If (vFrame<#False): vFrame = ImageFrameCount(#mainImage) + 1: EndIf
Repeat
SetImageFrame(#mainImage, pFrame)
If StartDrawing(ImageOutput(#mainImage))
If (pFrame>vFrame)
DrawingFont(pFont)
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(120, 0, pValue)
pZaehler + 1
EndIf
Select pZaehler
Case 5: pValue + Mid(#NewText, 2, 1)
Case 10: pValue + Mid(#NewText, 3, 1)
Case 15: pValue + Mid(#NewText, 4, 1)
EndSelect
StopDrawing()
EndIf
pFrame + 1
If (pFrame=ImageFrameCount(#mainImage)): Break: EndIf
ForEver
GIF_Viewer(vSave)
If vSave: GIF_Save(): EndIf
Else
Debug "Kann die Datei nicht laden: " + #gifFile
EndIf
EndProcedure
;GIF_originalViewer(15)
GIF_testViewer(15) ;, #True)
MessageRequester("InfoBox", "Programmende", #MB_ICONINFORMATION)
End
Zur INFO: Die Test GIF-Datei hatte 37 Frame.