Here it is. Had to do some cleaning.
Code: Select all
UsePNGImageDecoder()
UsePNGImageEncoder()
If OpenWindow(0, 0, 0, 400, 165, "Motion Blur", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
TextGadget(1, 10, 10, 360, 20, "Image Folder")
StringGadget(2, 10, 30, 360, 20, "")
ButtonGadget(3, 370, 30, 20, 20, "...")
TextGadget(4, 10, 60, 360, 20, "Output Folder")
StringGadget(5, 10, 80, 360, 20, "")
ButtonGadget(6, 370, 80, 20, 20, "...")
TextGadget(7, 10, 120, 100, 20, "Layers Per Frame")
StringGadget(8, 100, 115, 40, 20, "100")
ButtonGadget(9, 340, 115, 50, 20, "Render")
CreateStatusBar(10, WindowID(0))
AddStatusBarField(200)
AddStatusBarField(200)
StatusBarText(10, 0, "Total Images: 0")
StatusBarText(10, 1, "Frames Rendered: 0")
ImageIDs = 0
FrameNumber = 0
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 3 ;Select Image Folder
InitialPath$ = "C:\"
InputImages$ = PathRequester("Load images...", InitialPath$)
SetGadgetText(2, InputImages$)
ExamineDirectory(0, InputImages$, "*.png")
While NextDirectoryEntry(0)
ImageIDs +1
StatusBarText(10, 0, "Counting Images: " + Str(ImageIDs))
Wend
FinishDirectory(0)
StatusBarText(10, 0, "Total Images: " + Str(ImageIDs))
Case 6 ;Select Output Folder
InitialPath$ = "C:\"
OutputImages$ = PathRequester("Save images...", InitialPath$)
SetGadgetText(5, OutputImages$)
Case 9 ;Render
ExamineDirectory(1, InputImages$, "*.png")
For Refresh = (ImageIDs / Val(GetGadgetText(8))) To 1 Step -1
Alpha.f = 255 / Val(GetGadgetText(8))
AlphaFade.f = Alpha.f / Val(GetGadgetText(8))
AlphaMinus = Val(GetGadgetText(8))
FramesToRender = (ImageIDs / Val(GetGadgetText(8))) +1
NoAlpha = 1
NewImage = 0
Layers = 0
For AlphaLayer = ImageIDs To 1 Step -1
NextDirectoryEntry(1)
ImageName$ = DirectoryEntryName(1)
LoadImage(AlphaLayer, InputImages$ + ImageName$)
W = ImageWidth(ImageIDs)
H = ImageHeight(ImageIDs)
If NewImage = 0
CreateImage(0, W, H, 32 | #PB_Image_Transparent)
StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_Default)
NewImage +1
EndIf
If NoAlpha = 1
DrawAlphaImage(ImageID(AlphaLayer), 0, 0, 255)
Else
DrawAlphaImage(ImageID(AlphaLayer), 0, 0, Alpha.f) ;Stops at Frame 20 when rendering, The specified #Image is not initialized
EndIf
AlphaMinus -1
Alpha.f = AlphaFade.f * AlphaMinus
Layers +1
NoAlpha +1
If Layers = Val(GetGadgetText(8))
FrameNumber +1
FramesToRender -1
SaveImage(0, OutputImages$+Str(FramesToRender)+".png", #PB_ImagePlugin_PNG, 32)
StatusBarText(10, 1, "Frames Rendered: " + Str(FrameNumber))
StopDrawing()
FreeImage(0)
For FreeImages = ImageIDs To ImageIDs - Val(GetGadgetText(8))
FreeImage(FreeImages)
Next FreeImages
ImageIDs - Val(GetGadgetText(8))
Break
EndIf
Next AlphaLayer
Next Refresh
FinishDirectory(1)
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf