neu geschrieben. Ich habe mich bemüht, lesbaren Code zu schreiben und enableexplicit benutzt.
Das Programm läuft jetzt auch von Anfang bis Ende.
Nur am Ende funktioniert es eben wieder nicht. Da blicke ich durch die Zusammenhänge von PB noch
nicht ganz durch.
ich möchte eine schöne Box mit Farbverläufen zeichnen. Dafür ist in PB keine Funktion vorgesehen.
Ich habe also ein programm geschrieben, so daß ich die Parameter für die Funktion interaktiv austesten kann.
Danach soll einfach der Code der kompletten Funktion Boxfill() in das andere Programm geschrieben werden.
Die Funktion wird aufgerufen, zeichnet eine schöne bunte Box und liefert ein Bild ssamt Bildnummer zurück.
Dieses Bild kann dann im Programm benutzt werden. Soweit mein Plan.
Im folgenden Code, ist alle bis zum Letzten Abschnitt, mein Programm zum interaktiven Einstellen der Paramter.
Die letzte Funktion Boxfill ist die, die in das Hauptprogramm kopiert werden soll.
Der Aufruf erfolgt aus der Funktion NEUZEICH() in den letzten 5 Zeilen.
zur zeit sind die ausgeremt, damit man zunächst das Programm so testen kann.
wenn ich diese Zeilen aktiviere kommt eine für mich nicht lösbare Fehlermeldung
dabei habe ich die Image-nummern extra durch #PB_Any vergeben lassen.
Code: Alles auswählen
; FillBox 3.0
; Das programm soll dazu dienen, beim einfachen Boxkommando
; Farbverläufe einzubauen, so dass die Box etwas aufgepeppt wird
; als Programm soll es helfen die nötigen Paramater für die Box
; zu ermitteln; so dass man sieht wie die Box hinterher aussehen wird.
; anschließend soll in anderen Programmen nur die Funktion
; boxfill(Parameter) aufgerufen werden um dieses Bild zu erzeugen.
; Der Standard PureBasic-Befehl Box(x, y, Breite, Höhe [, Farbe])
; ergibt eine einfache farbige Box
; imageNummer=Boxfill(Breite,Höhe,FarbeP1,FarbeP2,FarbeP3,FarbeP4,Folge,Divisor,Detail)
; ergibt dann eine schöne bunte Box für Spielsteine, Spielkartenrückseiten,
; Buttons oder Ähnlichem
; --------------------------------------------------------
;{ Variablen-Definition
EnableExplicit
;
Global Dim fabox(200,200,3)
Declare BERECHNUNG()
Declare NEUZEICH()
Declare GESTALTUNG()
Declare Rech_Bild_oben()
Declare Rech_Bild_01()
Declare Rech_Bild_02()
Declare Rech_Bild_03()
Declare Rech_Bild_04()
Declare boxfill(grx,gry,FarbeP1,FarbeP2,FarbeP3,FarbeP4,folge,divisor,detail)
;EckPunkte der Box im Uhrzeigersinn: Links oben=P1 -> Links unten=P4
Global FarbeP1,FarbeP2,FarbeP3,FarbeP4
FarbeP1=RGB(0, 0, 0)
FarbeP2=RGB(0,200, 0)
FarbeP3=RGB(0, 0,200)
FarbeP4=RGB(0, 0, 0)
Global P1_rot, P1_grn, P1_Bla, P2_rot, P2_grn, P2_Bla
Global P3_rot, P3_grn, P3_Bla, P4_rot, P4_grn, P4_Bla
P1_rot= Red(FarbeP1):P1_grn=Green(FarbeP1):P1_bla= Blue(FarbeP1)
P2_rot= Red(FarbeP2):P2_grn=Green(FarbeP2):P1_bla= Blue(FarbeP2)
P3_rot= Red(FarbeP1):P3_grn=Green(FarbeP3):P1_bla= Blue(FarbeP3)
; grx = x-Ausdehnung der neu zu zeichnenden Box
; gry = y-Ausdehnung der neu zu zeichnenden Box
; Detail = Zusammensetzung der Box aus den 4 mittleren Bildern
; ( 0= alle vier; 1= nur Li ob; 2= li ob + re ob; 3=li ob + li un)
Global grx,gry,detail,divisor,folge
grx=60:gry=60:detail=0:divisor=80:folge=1234
; Nummer des Bildes welches in der Mitte an der jewiligen
; Position dargestellt wird. Pos. 1 = links oben und dann im
; Uhrzeigersinn wie bei den Eckpunkten
; NumKB_1=6 bedeutet: Bild6 also rechts unten wird an Position1
; also links oben dargestellt
Global NumKB_1,NumKB_2,NumKB_3,NumKB_4,bildfertig
NumKB_1=1:NumKB_2=2:NumKB_3=3:NumKB_4=4:bildfertig=0
;}
; --------------------------------------------------------
; --------------------------------------------------------
;{ Objekt-Definition
Enumeration ; Fenster
#Win_Main
EndEnumeration
; --
Enumeration ; Gadgets
#St_P1_Rot
#St_P1_Grn
#St_P1_Bla
#St_P2_Rot
#St_P2_Grn
#St_P2_Bla
#St_P3_Rot
#St_P3_Grn
#St_P3_Bla
#St_P4_Rot
#St_P4_Grn
#St_P4_Bla
#St_Divisor
#St_Folge
#St_grx
#St_gry
#St_Detail
;
#Tx_P1_Rot
#Tx_P1_Grn
#Tx_P1_Bla
#Tx_P2_Rot
#Tx_P2_Grn
#Tx_P2_Bla
#Tx_P3_Rot
#Tx_P3_Grn
#Tx_P3_Bla
#Tx_P4_Rot
#Tx_P4_Grn
#Tx_P4_Bla
#Tx_Divisor
#Tx_Folge
#Tx_grx
#Tx_gry
#Tx_Detail
;
#Bt_Neuzeich
;
#CV_oben
#CV_mitte
#CV_unten
EndEnumeration
; --
Enumeration ; Bilder
#bld00
#bld01
#bld02
#bld03
#bld04
#bld05
EndEnumeration
;}
; --------------------------------------------------------
; --------------------------------------------------------
;{ Fenster erstellen und öffnen
OpenWindow(#Win_Main, 0, 0, 450, 660, "BoxFill", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
; --
CreateImage(#Bld00, 200, 200)
CreateImage(#Bld01, 200, 200)
CreateImage(#Bld02, 200, 200)
CreateImage(#Bld03, 200, 200)
CreateImage(#Bld04, 200, 200)
;#bld05 muss zum Schluss dynamisch erzeugt werden
; --
; (Nr, x, y,Breite, Höhe;Inhalt$; Flag)
StringGadget(#St_P1_rot , 260, 10, 80, 20,Str(P1_rot) , #PB_String_Numeric)
StringGadget(#St_P1_Grn , 260, 35, 80, 20,Str(P1_grn) , #PB_String_Numeric)
StringGadget(#St_P1_Bla , 260, 60, 80, 20,Str(P1_bla) , #PB_String_Numeric)
StringGadget(#St_P2_Rot , 260, 85, 80, 20,Str(P2_rot) , #PB_String_Numeric)
StringGadget(#St_P2_Grn , 260, 110, 80, 20,Str(P2_grn) , #PB_String_Numeric)
StringGadget(#St_P2_Bla , 260, 135, 80, 20,Str(P2_bla) , #PB_String_Numeric)
StringGadget(#St_P3_Rot , 260, 160, 80, 20,Str(P4_rot) , #PB_String_Numeric)
StringGadget(#St_P3_Grn , 260, 185, 80, 20,Str(P4_grn) , #PB_String_Numeric)
StringGadget(#St_P3_Bla , 260, 210, 80, 20,Str(P4_bla) , #PB_String_Numeric)
StringGadget(#St_P4_Rot , 260, 235, 80, 20,Str(P3_rot) , #PB_String_Numeric)
StringGadget(#St_P4_Grn , 260, 260, 80, 20,Str(P3_grn) , #PB_String_Numeric)
StringGadget(#St_P4_Bla , 260, 285, 80, 20,Str(P3_bla) , #PB_String_Numeric)
StringGadget(#St_Divisor, 260, 310, 80, 20,Str(Divisor), #PB_String_Numeric)
StringGadget(#St_Folge , 260, 335, 80, 20,Str(Folge) , #PB_String_Numeric)
StringGadget(#St_grx , 260, 360, 80, 20,Str(grx) , #PB_String_Numeric)
StringGadget(#St_gry , 260, 385, 80, 20,Str(gry) , #PB_String_Numeric)
StringGadget(#St_Detail , 260, 410, 80, 20,Str(Detail) , #PB_String_Numeric)
; --
TextGadget(#Tx_P1_Rot ,350, 13,80,20,"Li ob rot")
TextGadget(#Tx_P1_Grn ,350, 38,80,20,"Li ob grn")
TextGadget(#Tx_P1_Bla ,350, 63,80,20,"Li ob bla")
TextGadget(#Tx_P2_Rot ,350, 88,80,20,"Re ob rot")
TextGadget(#Tx_P2_grn ,350,113,80,20,"Re ob grn")
TextGadget(#Tx_P2_bla ,350,138,80,20,"Re ob bla")
TextGadget(#Tx_P3_Rot ,350,163,80,20,"Li un rot")
TextGadget(#Tx_P3_grn ,350,188,80,20,"Li un grn")
TextGadget(#Tx_P3_bla ,350,213,80,20,"Li un bla")
TextGadget(#Tx_P4_Rot ,350,238,80,20,"Re un rot")
TextGadget(#Tx_P4_grn ,350,263,80,20,"Re un grn")
TextGadget(#Tx_P4_bla ,350,288,80,20,"Re un bla")
TextGadget(#Tx_Divisor,350,313,80,20,"Divisor ")
TextGadget(#Tx_Folge ,350,338,80,20,"Reihenfolge")
TextGadget(#Tx_grx ,350,363,80,20,"Resize x ")
TextGadget(#Tx_gry ,350,388,80,20,"Resize y ")
TextGadget(#Tx_Detail ,350,413,80,20,"Detail")
; --
ButtonGadget(#Bt_Neuzeich,260,438,80,20,"Neu Zeichnen",#PB_Button_Toggle)
; --
CanvasGadget(#Cv_Oben , 10, 10, 200, 200)
CanvasGadget(#Cv_Mitte, 10, 225, 200, 200)
CanvasGadget(#Cv_Unten, 10, 440, 200, 200)
;}
; --------------------------------------------------------
; --------------------------------------------------------
;{ erstes Bild darstellen
BERECHNUNG()
NEUZEICH()
;}
; --------------------------------------------------------
; --------------------------------------------------------
;{ Hauptschleife
Define event,quit,num,dipneu
event=0:quit=0:num=0:dipneu=0
Define aa$,a1,a2,a3,a4,dip
Repeat
Event = WaitWindowEvent()
If event=#PB_Event_CloseWindow:quit=1:EndIf
If event= #PB_Event_Gadget
num=EventGadget()
dipneu=0
Select num
Case #St_P1_Rot
If EventType()= #PB_EventType_Change
P1_rot=Val(GetGadgetText(#St_P1_Rot))
If P1_rot>255:P1_rot=255:SetGadgetText(#St_P1_Rot,Str(P1_rot)):EndIf
If P1_rot< 0:P1_rot= 0:SetGadgetText(#St_P1_Rot,Str(P1_rot)):EndIf
dipneu=1
EndIf
Case #St_P1_Grn
If EventType()= #PB_EventType_Change
P1_grn=Val(GetGadgetText(#St_P1_Grn))
If P1_grn>255:P1_grn=255:SetGadgetText(#St_P1_Grn,Str(P1_grn)):EndIf
If P1_grn< 0:P1_grn= 0:SetGadgetText(#St_P1_Grn,Str(P1_grn)):EndIf
dipneu=1
EndIf
Case #St_P1_Bla
If EventType()= #PB_EventType_Change
P1_bla=Val(GetGadgetText(#St_P1_Bla))
If P1_bla>255:P1_bla=255:SetGadgetText(#St_P1_Bla,Str(P1_bla)):EndIf
If P1_bla< 0:P1_bla= 0:SetGadgetText(#St_P1_Bla,Str(P1_bla)):EndIf
dipneu=1
EndIf
Case #St_P2_Rot
If EventType()= #PB_EventType_Change
P2_rot=Val(GetGadgetText(#St_P2_Rot))
If P2_rot>255:P2_rot=255:SetGadgetText(#St_P2_Rot,Str(P2_rot)):EndIf
If P2_rot< 0:P2_rot= 0:SetGadgetText(#St_P2_Rot,Str(P2_rot)):EndIf
dipneu=1
EndIf
Case #St_P2_Grn
If EventType()= #PB_EventType_Change
P2_grn=Val(GetGadgetText(#St_P2_Grn))
If P2_grn>255:P2_grn=255:SetGadgetText(#St_P2_Grn,Str(P2_grn)):EndIf
If P2_grn< 0:P2_grn= 0:SetGadgetText(#St_P2_Grn,Str(P2_grn)):EndIf
dipneu=1
EndIf
Case #St_P2_Bla
If EventType()= #PB_EventType_Change
P2_bla=Val(GetGadgetText(#St_P2_Bla))
If P2_bla>255:P2_bla=255:SetGadgetText(#St_P2_Bla,Str(P2_bla)):EndIf
If P2_bla< 0:P2_bla= 0:SetGadgetText(#St_P2_Bla,Str(P2_bla)):EndIf
dipneu=1
EndIf
Case #St_P3_Rot
If EventType()= #PB_EventType_Change
P4_rot=Val(GetGadgetText(#St_P3_Rot))
If P4_rot>255:P4_rot=255:SetGadgetText(#St_P3_Rot,Str(P4_rot)):EndIf
If P4_rot< 0:P4_rot= 0:SetGadgetText(#St_P3_Rot,Str(P4_rot)):EndIf
dipneu=1
EndIf
Case #St_P3_Grn
If EventType()= #PB_EventType_Change
P4_grn=Val(GetGadgetText(#St_P3_Grn))
If P4_grn>255:P4_grn=255:SetGadgetText(#St_P3_Grn,Str(P4_grn)):EndIf
If P4_grn< 0:P4_grn= 0:SetGadgetText(#St_P3_Grn,Str(P4_grn)):EndIf
dipneu=1
EndIf
Case #St_P3_Bla
If EventType()= #PB_EventType_Change
P4_bla=Val(GetGadgetText(#St_P3_Bla))
If P4_bla>255:P4_bla=255:SetGadgetText(#St_P3_Bla,Str(P4_bla)):EndIf
If P4_bla< 0:P4_bla= 0:SetGadgetText(#St_P3_Bla,Str(P4_bla)):EndIf
dipneu=1
EndIf
Case #St_P4_Rot
If EventType()= #PB_EventType_Change
P3_rot=Val(GetGadgetText(#St_P4_Rot))
If P3_rot>255:P3_rot=255:SetGadgetText(#St_P4_Rot,Str(P3_rot)):EndIf
If P3_rot< 0:P3_rot= 0:SetGadgetText(#St_P4_Rot,Str(P3_rot)):EndIf
dipneu=1
EndIf
Case #St_P4_Grn
If EventType()= #PB_EventType_Change
P3_grn=Val(GetGadgetText(#St_P4_Grn))
If P3_grn>255:P3_grn=255:SetGadgetText(#St_P4_Grn,Str(P3_grn)):EndIf
If P3_grn< 0:P3_grn= 0:SetGadgetText(#St_P4_Grn,Str(P3_grn)):EndIf
dipneu=1
EndIf
Case #St_P4_Bla
If EventType()= #PB_EventType_Change
P3_bla=Val(GetGadgetText(#St_P4_Bla))
If P3_bla>255:P3_bla=255:SetGadgetText(#St_P4_Bla,Str(P3_bla)):EndIf
If P3_bla< 0:P3_bla= 0:SetGadgetText(#St_P4_Bla,Str(P3_bla)):EndIf
dipneu=1
EndIf
Case #St_Divisor
If EventType()= #PB_EventType_Change
Divisor =Val(GetGadgetText(#St_Divisor))
If Divisor>999: Divisor=200:SetGadgetText(#St_Divisor,Str(Divisor)):EndIf
If Divisor< 0: Divisor= 1:SetGadgetText(#St_Divisor,Str(Divisor)):EndIf
dipneu=1
EndIf
Case #St_Folge
If EventType()= #PB_EventType_Change
; reihenfolge der 4 kleinen Bilder im Uhrzeigersinn L o => L u
aa$=GetGadgetText(#St_Folge)
a1=Val(Mid(aa$,1,1))
a2=Val(Mid(aa$,2,1))
a3=Val(Mid(aa$,3,1))
a4=Val(Mid(aa$,4,1))
If a1<0 : a1=1 : EndIf
If a1>4 : a1=4 : EndIf
If a2<0 : a2=1 : EndIf
If a2>4 : a2=4 : EndIf
If a3<0 : a3=1 : EndIf
If a3>4 : a3=4 : EndIf
If a4<0 : a4=1 : EndIf
If a4>4 : a4=4 : EndIf
folge=a1*1000+a2*100+a3*10+a4
If a1=1 :NumKB_1=#bld01:EndIf
If a1=2 :NumKB_1=#bld02:EndIf
If a1=3 :NumKB_1=#bld03:EndIf
If a1=4 :NumKB_1=#bld04:EndIf
; --
If a2=1 :NumKB_2=#bld01:EndIf
If a2=2 :NumKB_2=#bld02:EndIf
If a2=3 :NumKB_2=#bld03:EndIf
If a2=4 :NumKB_2=#bld04:EndIf
; --
If a3=1 :NumKB_3=#bld01:EndIf
If a3=2 :NumKB_3=#bld02:EndIf
If a3=3 :NumKB_3=#bld03:EndIf
If a3=4 :NumKB_3=#bld04:EndIf
; --
If a4=1 :NumKB_4=#bld01:EndIf
If a4=2 :NumKB_4=#bld02:EndIf
If a4=3 :NumKB_4=#bld03:EndIf
If a4=4 :NumKB_4=#bld04:EndIf
dipneu=1
EndIf
Case #St_grx
If EventType()= #PB_EventType_Change
grx=Val(GetGadgetText(#St_grx))
If grx>200:grx=200:SetGadgetText(#St_grx,Str(grx)):EndIf
If grx< 0:grx= 20:SetGadgetText(#St_grx,Str(grx)):EndIf
dipneu=1
EndIf
Case #St_gry
If EventType()= #PB_EventType_Change
gry=Val(GetGadgetText(#St_gry))
If gry>200:gry=200:SetGadgetText(#St_gry,Str(gry)):EndIf
If gry< 0:gry= 20:SetGadgetText(#St_gry,Str(gry)):EndIf
dipneu=1
EndIf
Case #St_Detail
If EventType()= #PB_EventType_Change
; welche Bilder sollen gegrabbt werden für resize
detail=Val(GetGadgetText(#St_Detail))
If detail>3:detail=3:SetGadgetText(#St_Detail,Str(detail)):EndIf
If detail<0:detail=0:SetGadgetText(#St_Detail,Str(detail)):EndIf
dipneu=2
EndIf
Case #Bt_Neuzeich
dip=GetGadgetState(#Bt_Neuzeich)
If dip=1
Neuzeich()
SetGadgetText(#St_Folge,Str(folge))
SetGadgetState(#Bt_Neuzeich,0)
EndIf
EndSelect
EndIf
If dipneu=1
BERECHNUNG()
EndIf
If dipneu=2
BERECHNUNG()
GESTALTUNG()
EndIf
Until quit=1
End
;} Haupschleife Ende
; --------------------------------------------------------
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure Neuzeich()
;Bild oben original
StartDrawing(CanvasOutput(#CV_oben))
FrontColor(RGB(220,220,220)):Box(0,0,200,200)
DrawImage(ImageID(#bld00), 0, 0)
StopDrawing()
;bild mitte ; Viertelbild von oben; reihenfolge änderbar
StartDrawing(CanvasOutput(#cv_mitte))
FrontColor(RGB(220,220,220)):Box(00,215,200,200)
DrawImage(ImageID(NumKB_1), 0, 0,100,100)
DrawImage(ImageID(NumKB_2),100, 0,100,100)
DrawImage(ImageID(NumKB_3),100,100,100,100)
DrawImage(ImageID(NumKB_4), 0,100,100,100)
StopDrawing()
If bildfertig=1
StartDrawing (WindowOutput(#Win_Main))
DrawImage(ImageID(#bld05),450-10-grx,660-10-gry)
StopDrawing()
EndIf
; hier ist der Aufruf der Funktion boxfill im jeweilgen Hauptprogramm
; Protected boxnum
; boxnum=Boxfill(grx,gry,FarbeP1,FarbeP2,FarbeP3,FarbeP4,folge,divisor,detail)
; StartDrawing (WindowOutput(#Win_Main))
; DrawImage(ImageID(boxnum),450-200-grx,660-200-gry)
; StopDrawing()
; ende Boxfill-Aufruf im Hauptprogramm
EndProcedure
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure Berechnung()
Rech_Bild_oben()
Rech_Bild_01()
Rech_Bild_02()
Rech_Bild_03()
Rech_Bild_04()
EndProcedure
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure Rech_Bild_oben()
Protected qy,qx,farbe
Protected DiffLiRot,DiffLigrn,DiffLiBla
Protected DiffReRot,DiffRegrn,DiffReBla
Protected DiffObRot,DiffObgrn,DiffObBla
Protected Falirot,faligrn,falibla
Protected FaRerot,faRegrn,faRebla
FarbeP1=RGB(p1_rot,p1_grn,p1_bla)
FarbeP2=RGB(p2_rot,p2_grn,p2_bla)
FarbeP3=RGB(p3_rot,p3_grn,p3_bla)
;Farbdifferenzen zwischen Links Oben und Links Unten
DiffLirot=P1_rot-P4_rot
DiffLigrn=P1_grn-P4_grn
DiffLibla=P1_bla-P4_bla
;Farbdifferenzen zwischen Rechts Oben und Rechts Unten
DiffRerot=P2_rot-P3_rot
DiffRegrn=P2_grn-P3_grn
DiffRebla=P2_bla-P3_bla
For qy=0 To 199
;Berechnen der Farbe des Punktes auf der y-Achse
;Linksdifferenz/ Divisor*yStrecke
FaLiRot=P1_rot+(Int(DiffLirot/Divisor)*qy)
FaLigrn=P1_grn+(Int(DiffLigrn/Divisor)*qy)
FaLibla=P1_bla+(Int(DiffLibla/Divisor)*qy)
;Berechnen der FArbe des Punktes auf der y-Achse
;Rechtsdifferenz/ Divisor*yStrecke
FaRerot=P2_rot+(Int(DiffRerot/Divisor)*qy)
FaRegrn=P2_grn+(Int(DiffRegrn/Divisor)*qy)
FaRebla=P2_bla+(Int(DiffRebla/Divisor)*qy)
;Farbdifferenzen zwischen Links und Rechts
Diffobrot=FaLiRot-FaRerot
Diffobgrn=FaLigrn-FaRegrn
Diffobbla=FaLibla-FaRebla
For qx=0 To 199
fabox(qx,qy,0)=FaLiRot+(Int((diffobrot/Divisor)*qx))
fabox(qx,qy,1)=FaLigrn+(Int((diffobgrn/Divisor)*qx))
fabox(qx,qy,2)=FaLibla+(Int((diffobbla/Divisor)*qx))
Next qx
Next qy
StartDrawing(ImageOutput(#bld00))
For qy= 0 To 199
For qx= 0 To 199
farbe=RGB(fabox(qx,qy,0),fabox(qx,qy,1),fabox(qx,qy,2))
Plot (qx,qy,farbe)
Next qx
Next qy
StopDrawing()
CopyImage(#bld00,#bld01)
CopyImage(#bld00,#bld02)
CopyImage(#bld00,#bld03)
CopyImage(#bld00,#bld04)
EndProcedure
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure Rech_Bild_01()
Protected dummy
dummy=1
EndProcedure
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure Rech_Bild_02()
; flip Horizontal Bild 00
Protected qy,qx,f11,f12,f13,f21,f22,f23
StartDrawing(ImageOutput(#bld02))
For qy=0 To 199
For qx=0 To 99
f11=fabox(qx ,qy,0)
f12=fabox(qx ,qy,1)
f13=fabox(qx ,qy,2)
f21=fabox(199-qx,qy,0)
f22=fabox(199-qx,qy,1)
f23=fabox(199-qx,qy,2)
Plot( qx,qy,RGB(f21,f22,f23))
Plot (199-qx,qy,RGB(f11,f12,f13))
Next qx
Next qy
StopDrawing()
EndProcedure
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure Rech_Bild_03()
; flip hrizontal und vertikal Bld00
StartDrawing(ImageOutput(#bld03))
Protected qy,qx,f11,f12,f13,f21,f22,f23,f31,f32,f33,f41,f42,f43
For qy=0 To 99
For qx=0 To 99
f11=fabox(qx,qy,0)
f12=fabox(qx,qy,1)
f13=fabox(qx,qy,2)
f21=fabox(199-qx,qy,0)
f22=fabox(199-qx,qy,1)
f23=fabox(199-qx,qy,2)
f31=fabox(199-qx,199-qy,0)
f32=fabox(199-qx,199-qy,1)
f33=fabox(199-qx,199-qy,2)
f41=fabox(qx,199-qy,0)
f42=fabox(qx,199-qy,1)
f43=fabox(qx,199-qy,2)
Plot( qx, qy,RGB(f31,f32,f33))
Plot(199-qx, qy,RGB(f41,f42,f43))
Plot(199-qx,199-qy,RGB(f11,f12,f13))
Plot( qx,199-qy,RGB(f21,f22,f23))
Next qx
Next qy
StopDrawing()
EndProcedure
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure Rech_Bild_04()
; flip vertikal bild0
Protected qx,qy,f11,f12,f13,f41,f42,f43
StartDrawing(ImageOutput(#bld04))
For qy=0 To 99
For qx=0 To 199
f11= fabox(qx,qy,0)
f12= fabox(qx,qy,1)
f13= fabox(qx,qy,2)
f41= fabox(qx,199-qy,0)
f42= fabox(qx,199-qy,1)
f43= fabox(qx,199-qy,2)
Plot(qx, qy,RGB(f41,f42,f43))
Plot(qx,199-qy,RGB(f11,f12,f13))
Next qx
Next qy
StopDrawing()
EndProcedure
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure Gestaltung()
Protected bldgrx,bldgry,qx,qy
Select detail
Case 0
bldgrx=grx/2:bldgry=gry/2
StartDrawing(CanvasOutput(#cv_unten))
DrawImage(ImageID(NumKB_1), 0, 0,bldgrx,bldgry)
DrawImage(ImageID(NumKB_2),bldgrx, 0,bldgrx,bldgry)
DrawImage(ImageID(NumKB_3),bldgrx,bldgry,bldgrx,bldgry)
DrawImage(ImageID(NumKB_4), 0,bldgry,bldgrx,bldgry)
StopDrawing()
Case 1
bldgrx=grx:bldgry=gry
StartDrawing(CanvasOutput(#cv_unten))
DrawImage(ImageID(NumKB_1), 0, 0,bldgrx,bldgry)
StopDrawing()
Case 2
bldgrx=grx/2:bldgry=gry
StartDrawing(CanvasOutput(#cv_unten))
DrawImage(ImageID(NumKB_1), 0, 0,bldgrx,bldgry)
DrawImage(ImageID(NumKB_2),bldgrx, 0,bldgrx,bldgry)
StopDrawing()
Case 3
bldgrx=grx:bldgry=gry/2
StartDrawing(CanvasOutput(#cv_unten))
DrawImage(ImageID(NumKB_1), 0, 0,bldgrx,bldgry)
DrawImage(ImageID(NumKB_4), 0,bldgry,bldgrx,bldgry)
StopDrawing()
EndSelect
bildfertig=0
CreateImage(#bld05,grx+1,gry+1)
StartDrawing(CanvasOutput(#cv_unten))
For qy=0 To gry
For qx=0 To grx
fabox(qx,qy,3)=Point(qx,qy)
Next qx
Next qy
StopDrawing()
StartDrawing(ImageOutput(#bld05))
For qy=0 To gry
For qx=0 To grx
Plot (qx,qy,fabox(qx,qy,3))
Next qx
Next qy
StopDrawing()
Bildfertig=1
EndProcedure
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
; diese Funktion wird dann einfach in ein anderes Programm kopiert, dann kann man
; mit Boxfill eine Box mit Farbverlauf erstellen und bekommt die Imagenummer
;zurückgeliefert, die man dann im Hauptprogramm als image benutzen kann
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure Boxfill(grx,gry,FarbeP1,FarbeP2,FarbeP3,FarbeP4,folge,divisor,detail)
; Protected grx,gry,FarbeP1,FarbeP2,Farbe,P3,FarbeP4,folge,divisor,detail
Protected img0,img1,img2,img3,img4,img5
Protected Dim fabox(200,200,3)
img0=CreateImage(#PB_Any,200,200)
img1=CreateImage(#PB_Any,200,200)
img2=CreateImage(#PB_Any,200,200)
img3=CreateImage(#PB_Any,200,200)
img4=CreateImage(#PB_Any,200,200)
img5=#PB_Any
; ---------------- Rech_Bild_oben() ----------------------
Protected qy,qx,farbe
Protected DiffLiRot,DiffLigrn,DiffLiBla
Protected DiffReRot,DiffRegrn,DiffReBla
Protected DiffObRot,DiffObgrn,DiffObBla
Protected Falirot,faligrn,falibla
Protected FaRerot,faRegrn,faRebla
p1_rot=Red(farbeP1):p1_grn=Green(farbeP1):p1_bla=Blue(farbeP1)
p2_rot=Red(farbeP2):p1_grn=Green(farbeP2):p1_bla=Blue(farbeP2)
p3_rot=Red(farbeP3):p1_grn=Green(farbeP3):p1_bla=Blue(farbeP3)
;Farbdifferenzen zwischen Links Oben und Links Unten
DiffLirot=P1_rot-P4_rot
DiffLigrn=P1_grn-P4_grn
DiffLibla=P1_bla-P4_bla
;Farbdifferenzen zwischen Rechts Oben und Rechts Unten
DiffRerot=P2_rot-P3_rot
DiffRegrn=P2_grn-P3_grn
DiffRebla=P2_bla-P3_bla
For qy=0 To 199
;Berechnen der Farbe des Punktes auf der y-Achse
;Linksdifferenz/ Divisor*yStrecke
FaLiRot=P1_rot+(Int(DiffLirot/Divisor)*qy)
FaLigrn=P1_grn+(Int(DiffLigrn/Divisor)*qy)
FaLibla=P1_bla+(Int(DiffLibla/Divisor)*qy)
;Berechnen der FArbe des Punktes auf der y-Achse
;Rechtsdifferenz/ Divisor*yStrecke
FaRerot=P2_rot+(Int(DiffRerot/Divisor)*qy)
FaRegrn=P2_grn+(Int(DiffRegrn/Divisor)*qy)
FaRebla=P2_bla+(Int(DiffRebla/Divisor)*qy)
;Farbdifferenzen zwischen Links und Rechts
Diffobrot=FaLiRot-FaRerot
Diffobgrn=FaLigrn-FaRegrn
Diffobbla=FaLibla-FaRebla
For qx=0 To 199
fabox(qx,qy,0)=FaLiRot+(Int((diffobrot/Divisor)*qx))
fabox(qx,qy,1)=FaLigrn+(Int((diffobgrn/Divisor)*qx))
fabox(qx,qy,2)=FaLibla+(Int((diffobbla/Divisor)*qx))
Next qx
Next qy
StartDrawing(ImageOutput(img0))
For qy= 0 To 199
For qx= 0 To 199
farbe=RGB(fabox(qx,qy,0),fabox(qx,qy,1),fabox(qx,qy,2))
Plot (qx,qy,farbe)
Next qx
Next qy
StopDrawing()
CopyImage(img0,img1)
CopyImage(img0,img2)
CopyImage(img0,img3)
CopyImage(img0,img4)
; ---------------- Rech_Bild_oben() ENDE --------------
; ----------------- Rech_Bild_2 -------------------------
; flip Horizontal Bild 00
Protected f11,f12,f13,f21,f22,f23
StartDrawing(ImageOutput(img2))
For qy=0 To 199
For qx=0 To 99
f11=fabox(qx ,qy,0)
f12=fabox(qx ,qy,1)
f13=fabox(qx ,qy,2)
f21=fabox(199-qx,qy,0)
f22=fabox(199-qx,qy,1)
f23=fabox(199-qx,qy,2)
Plot( qx,qy,RGB(f21,f22,f23))
Plot (199-qx,qy,RGB(f11,f12,f13))
Next qx
Next qy
StopDrawing()
; ----------------- Rech_Bild_2 ENDE --------------------
; ----------------- Rech_Bild_3 -------------------------
; flip hrizontal und vertikal Bld00
StartDrawing(ImageOutput(img3))
Protected f31,f32,f33,f41,f42,f43
For qy=0 To 99
For qx=0 To 99
f11=fabox(qx,qy,0)
f12=fabox(qx,qy,1)
f13=fabox(qx,qy,2)
f21=fabox(199-qx,qy,0)
f22=fabox(199-qx,qy,1)
f23=fabox(199-qx,qy,2)
f31=fabox(199-qx,199-qy,0)
f32=fabox(199-qx,199-qy,1)
f33=fabox(199-qx,199-qy,2)
f41=fabox(qx,199-qy,0)
f42=fabox(qx,199-qy,1)
f43=fabox(qx,199-qy,2)
Plot( qx, qy,RGB(f31,f32,f33))
Plot(199-qx, qy,RGB(f41,f42,f43))
Plot(199-qx,199-qy,RGB(f11,f12,f13))
Plot( qx,199-qy,RGB(f21,f22,f23))
Next qx
Next qy
StopDrawing()
; ----------------- Rech_Bild_3 ENDE --------------------
; ----------------- Rech_Bild_4 -------------------------
; flip vertikal bild0
StartDrawing(ImageOutput(img4))
For qy=0 To 99
For qx=0 To 199
f11= fabox(qx,qy,0)
f12= fabox(qx,qy,1)
f13= fabox(qx,qy,2)
f41= fabox(qx,199-qy,0)
f42= fabox(qx,199-qy,1)
f43= fabox(qx,199-qy,2)
Plot(qx, qy,RGB(f41,f42,f43))
Plot(qx,199-qy,RGB(f11,f12,f13))
Next qx
Next qy
StopDrawing()
; ----------------- Rech_Bild_4 ENDE --------------------
; ----------------- Gestaltung --------------------------
Protected bldgrx,bldgry,winnr,canvasnr,FensterNummer
Protected NumKB_1,NumKB_2,NumKB_3,NumKB_4
Protected aa$,a1,a2,a3,a4
FensterNummer = GetActiveWindow()
winnr=OpenWindow(#PB_Any, 0, 0, 210, 410, "BoxFill", #PB_Window_Invisible)
SetActiveWindow(winnr)
canvasnr=CanvasGadget(#PB_Any,1,1,209, 409)
aa$=Str(folge)
a1=Val(Mid(aa$,1,1))
a2=Val(Mid(aa$,2,1))
a3=Val(Mid(aa$,3,1))
a4=Val(Mid(aa$,4,1))
If a1=1 :NumKB_1=img1:EndIf
If a1=2 :NumKB_1=img2:EndIf
If a1=3 :NumKB_1=img3:EndIf
If a1=4 :NumKB_1=img4:EndIf
; --
If a2=1 :NumKB_2=img1:EndIf
If a2=2 :NumKB_2=img2:EndIf
If a2=3 :NumKB_2=img3:EndIf
If a2=4 :NumKB_2=img4:EndIf
; --
If a3=1 :NumKB_3=img1:EndIf
If a3=2 :NumKB_3=img2:EndIf
If a3=3 :NumKB_3=img3:EndIf
If a3=4 :NumKB_3=img4:EndIf
; --
If a4=1 :NumKB_4=img1:EndIf
If a4=2 :NumKB_4=img2:EndIf
If a4=3 :NumKB_4=img3:EndIf
If a4=4 :NumKB_4=img4:EndIf
Select detail
Case 0
bldgrx=grx/2:bldgry=gry/2
StartDrawing(CanvasOutput(canvasnr))
DrawImage(ImageID(NumKB_1), 0, 0,bldgrx,bldgry)
DrawImage(ImageID(NumKB_2),bldgrx, 0,bldgrx,bldgry)
DrawImage(ImageID(NumKB_3),bldgrx,bldgry,bldgrx,bldgry)
DrawImage(ImageID(NumKB_4), 0,bldgry,bldgrx,bldgry)
StopDrawing()
Case 1
bldgrx=grx:bldgry=gry
StartDrawing(CanvasOutput(canvasnr))
DrawImage(ImageID(NumKB_1), 0, 0,bldgrx,bldgry)
StopDrawing()
Case 2
bldgrx=grx/2:bldgry=gry
StartDrawing(CanvasOutput(canvasnr))
DrawImage(ImageID(NumKB_1), 0, 0,bldgrx,bldgry)
DrawImage(ImageID(NumKB_2),bldgrx, 0,bldgrx,bldgry)
StopDrawing()
Case 3
bldgrx=grx:bldgry=gry/2
StartDrawing(CanvasOutput(canvasnr))
DrawImage(ImageID(NumKB_1), 0, 0,bldgrx,bldgry)
DrawImage(ImageID(NumKB_4), 0,bldgry,bldgrx,bldgry)
StopDrawing()
EndSelect
CreateImage(img5,grx+1,gry+1)
StartDrawing(CanvasOutput(canvasnr))
For qy=0 To gry
For qx=0 To grx
fabox(qx,qy,3)=Point(qx,qy)
Next qx
Next qy
StopDrawing()
StartDrawing(ImageOutput(img5))
For qy=0 To gry
For qx=0 To grx
Plot (qx,qy,fabox(qx,qy,3))
Next qx
Next qy
StopDrawing()
; numkb muss noch ermittelt werden
; es muss ein canvas erstellt wedren
; um das bild zu zeichen und dann zu greabben
ProcedureReturn img5
SetActiveWindow(fensternummer)
CloseWindow(winnr)
;kann man das array fabox wieder löschen ?
;kann man die Bilder 1-4 löschen ?
; ----------------- Gestaltung ENDE --------------------
EndProcedure
; +++++++++++++++++++++++++++++++++++++++++++++++++++++