Bin aber hier nun wieder blutiger Anfänger

Seit Tagen durchsuche ich hier das Forum nach einer Antwort auf mein Problem. Da ich nicht fündig geworden bin (was sicherlich auch daran liegt, dass ich das meiste noch gar nicht verstehe und daher auch nicht nachvollziehen kann) poste ich jetzt mal meine Frage.
Ich möchte auf einem Canvas zeichnen und dann das Bild abspeichern. Weiß aber nicht, sie ich den Inhalt des Canvas auf ein Image bekomme.
Ich habe dazu drei Dateien (test2.pbf, test2.pbi und test2.pb)
test2.pbf
Code: Alles auswählen
Global Window_0
Global Button_0, Canvas_0, Button_1
Declare Speichern(EventType)
Declare Zeichne(EventType)
Procedure OpenWindow_0(x = 0, y = 0, width = 750, height = 500)
Window_0 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
Button_0 = ButtonGadget(#PB_Any, 50, 120, 90, 40, "Start", #PB_Button_Left)
GadgetToolTip(Button_0, "startet zeichnen")
Canvas_0 = CanvasGadget(#PB_Any, 220, 10, 480, 480)
Button_1 = ButtonGadget(#PB_Any, 50, 240, 90, 40, "Speichern")
EndProcedure
Procedure Window_0_Events(event)
Select event
Case #PB_Event_CloseWindow
ProcedureReturn #False
Case #PB_Event_Menu
Select EventMenu()
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case Button_0
Zeichne(EventType())
Case Button_1
Speichern(EventType())
EndSelect
EndSelect
ProcedureReturn #True
EndProcedure
Code: Alles auswählen
OpenWindow_0()
Repeat
pgrlauf = Window_0_Events(WaitWindowEvent())
Until pgrlauf = #False
End
Code: Alles auswählen
IncludeFile "test2.pbf"
IncludeFile "test2.pbi"
Procedure Zeichne(EventType)
a = 480
b = 480
StartDrawing(CanvasOutput(Canvas_0))
For i = 0 To a - 1
For j = 0 To b - 1
Plot(i, j, RGB(Mod((i/3)*(j/5), 255), Mod(i*j, 255), Mod(a, 255)))
Next j
Next i
StopDrawing()
EndProcedure
Procedure Speichern(EventType)
File$ = SaveFileRequester("Save Image...", "Mandala", "BMP-Images|*.bmp", 0)
If File$ And (FileSize(File$) = -1 Or MessageRequester("CanvasGadget", "Overwrite this file? " + File$, #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes)
If SaveImage(CanvasOutput(Canvas_0), File$, #PB_ImagePlugin_BMP ) = 0
MessageRequester("CanvasGadget", "Cannot save image: " + File$)
EndIf
EndIf
EndProcedure

So funktioniert es offenbar nicht

Wie überträgt man also den Inhalt eines Canvas auf ein Image, das man dann speichern kann?
herzlichen Gruß
Gerhard