Seite 1 von 2
[Fixed] FillArea - RandFarbe = -1 geht nur ein mal ?
Verfasst: 24.10.2009 03:59
von STARGÅTE
Tachchen,
irgendwie bin ich zu blöd FillArea zu verstehen, oder es ist ein BUG:
Wenn als Parameter 'RandFarbe' -1 angegeben wird, dann wird die Fläche - welche von der an den (x,y) Koordinaten gefundenen Farbe definiert wird - gefüllt
Wenn ich hier die beiden Boxen mit Rot fülle dann geht das wunderbar, aber wenn ich danach versuche sie wiederum mit Blau nachzufüllen, geht das nicht mehr.
Nur wenn ich explizit die Randfarbe angebe geht es!
Aber es kommt auch mal vor das der Rand nciht einfarbig ist, was nun ?
Code: Alles auswählen
CreateImage(0, 256, 256)
StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_Outlined)
Box( 32, 32, 64, 192, $00FF00)
Box(160, 32, 64, 192 ,$00FF00)
FillArea( 64, 128, -1, $0000FF)
FillArea(192, 128, $00FF00, $0000FF)
FillArea( 64, 128, -1, $FF0000)
FillArea(192, 128, $00FF00, $FF0000)
StopDrawing()
OpenWindow(0, 0, 0, ImageWidth(0), ImageHeight(0), "Fenster", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ImageGadget(0, 0, 0, ImageWidth(0), ImageHeight(0), ImageID(0))
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Re: FillArea - RandFarbe = -1 geht nur ein mal ?
Verfasst: 24.10.2009 08:33
von Pelagio
Hallo STARGATE,
erklären, mit Worten, kann ich AreaFill auch nicht richtig aber ich hoffe das mein Beispiel bei dir KLICK macht und das Verständnis für das AreaFill klar zu tage tritt.
Code: Alles auswählen
Global Width = 270
Global Height = 270
Procedure EditColor(vFlag.b)
If StartDrawing(WindowOutput(0))
x = Width/2
y = Height/2
Select vFlag
Case 1
FillArea(x, y+5, -1, #Red)
Case 2
FillArea(x, y+5, -1, #Green)
Case 3
FillArea(x, y+5, #Yellow, #Magenta)
Default
LineXY(x-120, y, x+120, y, #White)
EndSelect
StopDrawing()
EndIf
EndProcedure
If OpenWindow(0, 0, 0, Width, Height, "FillArea", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If StartDrawing(WindowOutput(0))
x = Width/2
y = Height/2
Circle(x, y, 125 ,#Yellow)
Circle(x, y, 120 ,#Blue)
LineXY(x-120, y, x+120, y, #White)
StopDrawing() ; Dies ist absolut notwendig, wenn die Zeichenoperationen abgeschlossen sind!!! Vergessen Sie dies nicht!
EndIf
AddWindowTimer(0, 0, 3000)
Repeat
Event = WaitWindowEvent()
If Event=#PB_Event_Timer: EditColor(n)
If (n=3)
If z%2: n=0: Else: n=1: EndIf
Z+1
Else
n + 1
EndIf
EndIf
Until (Event = #PB_Event_CloseWindow)
EndIf
Re: FillArea - RandFarbe = -1 geht nur ein mal ?
Verfasst: 24.10.2009 10:10
von Little John
Zwar ist die Hilfe zu
FillArea() ist in Bezug auf 'Randfarbe = -1' etwas unglücklich formuliert, trotzdem sollte Stargates Code IMHO wie erwartet funktionieren. Noch deutlicher wird es, wenn man den Code etwas vereinfacht:
Code: Alles auswählen
CreateImage(0, 256, 256)
StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_Outlined)
Box( 32, 32, 64, 192, $00FF00)
; FillArea( 64, 128, -1, $0000FF)
FillArea( 64, 128, -1, $FF0000)
StopDrawing()
OpenWindow(0, 0, 0, ImageWidth(0), ImageHeight(0), "Fenster", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ImageGadget(0, 0, 0, ImageWidth(0), ImageHeight(0), ImageID(0))
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Die Box wird blau ausgefüllt.
Wenn man jetzt den ersten
FillArea()-Befehl aktiviert, füllt dieser die Box erwartungsgemäß rot aus, danach füllt der zweite
FillArea()-Befehl sie aber nicht mehr blau aus (PB 4.40 Beta 5 auf Windows XP x86). Das ist IMHO ein Bug.
Gruß, Little John
Re: FillArea - RandFarbe = -1 geht nur ein mal ?
Verfasst: 24.10.2009 11:43
von Kaeru Gaman
hab grad mal probiert, ein neues startdrawing und einen anderen bezugspunkt zu benutzen, geht auch nicht.
Code: Alles auswählen
CreateImage(0, 256, 256)
StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_Outlined)
Box( 32, 32, 64, 192, $00FF00)
FillArea( 64, 128, -1, $0000FF)
StopDrawing()
StartDrawing(ImageOutput(0))
FillArea( 65, 128, -1, $FF0000)
StopDrawing()
OpenWindow(0, 0, 0, ImageWidth(0), ImageHeight(0), "Fenster", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ImageGadget(0, 0, 0, ImageWidth(0), ImageHeight(0), ImageID(0))
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
also, ganz klar ein Bug.
wer postets im Englischen?
Re: FillArea - RandFarbe = -1 geht nur ein mal ?
Verfasst: 24.10.2009 11:55
von STARGÅTE
du, danke ^^
Re: FillArea - RandFarbe = -1 geht nur ein mal ?
Verfasst: 24.10.2009 12:01
von Kaeru Gaman
ich muss jetzt in die Küche, und nachm Essen will ich Dead Like Me gucken, also würde sich das extem hinziehen, wenn ichs nicht sogar vergesse...
also, machs bitte jemand anders...
Re: FillArea - RandFarbe = -1 geht nur ein mal ?
Verfasst: 24.10.2009 13:33
von Pelagio
Hallo Gleichgesinnte,
ich glaube ich verstehe euer Anliegen nicht richtig.
Zwar ist die Hilfe etwas unglücklich in Ihrer Aussagekraft aber ein Bug kann ich beim besten Willen nicht erkennen.
Einmal füllt das AreaFill bis zur Umrandung (-1, es können also unterschiedliche Randfarben sein) und einmal die Fläche mit der angegeben Randfarbe.
Re: FillArea - RandFarbe = -1 geht nur ein mal ?
Verfasst: 24.10.2009 13:36
von Kaeru Gaman
schau dir doch mal bitte meinen code an.
das zweite FillArea müßte die Rote Fläche mit Blau füllen, tut es aber nicht.
Re: FillArea - RandFarbe = -1 geht nur ein mal ?
Verfasst: 24.10.2009 13:59
von Pelagio
Hallo Kaeru Gaman,
du hast recht, dein Code geht nicht, meiner schon, sowie dein etwas modifizierter:
Code: Alles auswählen
OpenWindow(0, 0, 0, 256, 256, "Fenster", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
StartDrawing(WindowOutput(0))
DrawingMode(#PB_2DDrawing_Outlined)
Box( 32, 32, 64, 192, $00FF00) ; Grün
FillArea( 64, 128, -1, #Blue)
StopDrawing()
StartDrawing(WindowOutput(0))
FillArea( 65, 128, -1, #Red)
StopDrawing()
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Es hat den Anschein als wenn das Problem zwischen AreaFill und Image auftritt.
Re: FillArea - RandFarbe = -1 geht nur ein mal ?
Verfasst: 24.10.2009 16:51
von STARGÅTE
also ich habe nun festgestellt es liegt an der Fartife:
Geht nicht :
Code: Alles auswählen
CreateImage(0,200,200,24)
StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_Outlined)
Box( 50, 50, 100, 100, $00FF00)
FillArea(100, 100, $00FF00, $00FF00)
FillArea(100, 100, -1, $FF0000)
StopDrawing()
OpenWindow(0, 0, 0, ImageWidth(0), ImageHeight(0), "Fenster", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ImageGadget(0, 0, 0, ImageWidth(0), ImageHeight(0), ImageID(0))
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Geht :
Code: Alles auswählen
CreateImage(0,200,200,32)
StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_Outlined)
Box( 50, 50, 100, 100, $00FF00)
FillArea(100, 100, $00FF00, $00FF00)
FillArea(100, 100, -1, $FF0000)
StopDrawing()
OpenWindow(0, 0, 0, ImageWidth(0), ImageHeight(0), "Fenster", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ImageGadget(0, 0, 0, ImageWidth(0), ImageHeight(0), ImageID(0))
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Das Image muss also 32Bit haben und nicht nur 24Bit, das sollte also gefixt werden.