[Fixed] FillArea - RandFarbe = -1 geht nur ein mal ?

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

[Fixed] FillArea - RandFarbe = -1 geht nur ein mal ?

Beitrag 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
Zuletzt geändert von STARGÅTE am 01.12.2009 04:19, insgesamt 1-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Re: FillArea - RandFarbe = -1 geht nur ein mal ?

Beitrag 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
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS]. :allright:
Little John

Re: FillArea - RandFarbe = -1 geht nur ein mal ?

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: FillArea - RandFarbe = -1 geht nur ein mal ?

Beitrag 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?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: FillArea - RandFarbe = -1 geht nur ein mal ?

Beitrag von STARGÅTE »

du, danke ^^
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: FillArea - RandFarbe = -1 geht nur ein mal ?

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Re: FillArea - RandFarbe = -1 geht nur ein mal ?

Beitrag 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.
Zuletzt geändert von Pelagio am 24.10.2009 13:36, insgesamt 1-mal geändert.
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS]. :allright:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: FillArea - RandFarbe = -1 geht nur ein mal ?

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Re: FillArea - RandFarbe = -1 geht nur ein mal ?

Beitrag 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.
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS]. :allright:
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: FillArea - RandFarbe = -1 geht nur ein mal ?

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten