Eigentlich dank der Aviserv-DLL keine große sache, aber ich beiß mir die zähne dran aus.
Hier mal der gesamte Code
Code: Alles auswählen
Structure AVI_INFO
aviWidth.l
aviHeight.l
aviFirstFrame.l
aviNumFrames.l
aviFPS.b
hwnd.l
EndStructure
Structure Movie
pfad.s
name.s
EndStructure
Enumeration
#Lib
EndEnumeration
Global INF.AVI_INFO
NewList Frames.Movie()
If OpenLibrary(#Lib,"AVIserv.dll")=0
MessageRequester("Test","nich geladen")
EndIf
Procedure BMP2AVI ()
INF.AVI_INFO
file.s = SaveFileRequester( "Save AVI", "", "AVI Video|*.avi", 0 )
If GetExtensionPart(file)<>".avi"
file=file+".avi"
EndIf
If CallFunction(#Lib,"AVI_Init")=0
MessageRequester("Fehler","Funktion nicht gefunden")
EndIf
FirstElement(Frames())
hBmp = LoadImage(0, Frames()\pfad)
If hBmp
If INF\aviWidth <= 0
INF\aviWidth = ImageWidth()
INF\aviHeight = ImageHeight()
INF\aviFPS = GetGadgetState(4)+1 ; Play 1 Frame per Second
;SetForegroundWindow_( INF\hwnd )
If CallFunction( #Lib, "OpenAVIForWrite", file.s, @INF ) = #False : EndIf
EndIf
EndIf
For b=2 To CountList(Frames())
SelectElement(Frames(),b)
hBmp = LoadImage(0, Frames()\pfad)
If hBmp
If INF\aviWidth + INF\aviHeight <> ImageWidth() + ImageHeight()
hBmp = ResizeImage( 0, INF\aviWidth, INF\aviHeight )
EndIf
If INF\aviWidth
If CallFunction( #Lib, "AddFrameToAVI", hBmp, -1 ) = #True ; -1 Autoincrement FrameNr
Frames + 1
EndIf
EndIf
EndIf
Debug "Hallo"
Next
CallFunction( #Lib, "CloseAVIStreams" )
EndProcedure
quit=0
UseJPEGImageDecoder()
FirstElement(Frames())
INF\hwnd=OpenWindow(1,100,100,700,500,#PB_Window_SystemMenu,"Filmmacher")
CreateGadgetList(INF\hwnd)
ListIconGadget(1,1,1,500,400,"Film",500,#PB_ListIcon_MultiSelect)
ButtonGadget(2,0,420,100,40,"Hinzufügen")
ButtonGadget(3,100,420,100,40,"Entfernen")
ComboBoxGadget(4,220,420,120,200)
SetGadgetState(1,1)
For a=0 To 26
AddGadgetItem(4,a,Str(a+1))
Next
SetGadgetState(4,25)
ButtonGadget(5,400,420,100,40,"Film erstellen")
Repeat
event=WaitWindowEvent()
If event=#PB_EventCloseWindow
quit=1
EndIf
If event=#PB_EventGadget
Select EventGadgetID()
Case 1
SelectElement(Frames(),GetGadgetState(1))
Case 2
name.s=OpenFileRequester("Bitte wählen sie die Bilder aus","","Bitmap und JPEG|*bmp;*jpg*",0,#PB_Requester_MultiSelection)
HideGadget(1,1);Das bringt mehr speed
While name
AddGadgetItem(1,GetGadgetState(1),GetFilePart(name))
AddElement(Frames())
Frames()\name=GetFilePart(name)
Frames()\pfad=name
name=NextSelectedFileName()
Wend
HideGadget(1,0)
Case 3
While GetGadgetState(1)>0
RemoveGadgetItem(1,GetGadgetState(1))
Wend
Case 5
BMP2AVI()
EndSelect
EndIf
Until quit
End
Eigentlich sollte das so gehen (hmk, da sind wohl noch n paar sachen, die ich noch machen muss, aber egal).
auf jeden fall, mein Programm schafft es nicht,
Code: Alles auswählen
If CallFunction( #Lib, "OpenAVIForWrite", file.s, @INF ) = #False : EndIf
die dll ist aber geladen und diese codestelle 1:1 aus dem beispiel kopiert,
wo es funktioniert