2DDrawing + #PB_2DDrawing_XOr

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

2DDrawing + #PB_2DDrawing_XOr

Beitrag von STARGÅTE »

Irgendwie scheint XOr beim Drawing n fehler zu verursachen, dass der Kreis total "ausgefranzt ist"

Code: Alles auswählen

CreateImage(0, 256, 256)

StartDrawing(ImageOutput(0))
 DrawingMode(#PB_2DDrawing_XOr)
 Circle(128,128,64)
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
 Event = WaitWindowEvent()
 Select Event
  Case #PB_Event_CloseWindow
   End
 EndSelect
ForEver
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
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag von X360 Andy »

bestätigt
PB.430 WIN 7 32 BIT
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Ja, das passt nicht.

XP-Home 32bit
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Jungs, vielleicht erstmal nen' bisschen nachforschen bevor man stumpf zustimmt. :roll:

Das Verhalten ist völlig korrekt wenn man den Mischungsmodus betrachtet. Wenn man GDI direkt benutzt erhält man das gleiche Ergebnis:

Code: Alles auswählen

CreateImage(0,140,140) : CreateImage(1,140,140)

StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_XOr)
Circle(69,69,64)
StopDrawing()

hdc = GetDC_(0)
hdcMem = CreateCompatibleDC_(hdc)
SelectObject_(hdcMem,ImageID(1))
SelectObject_(hdcMem,GetStockObject_(#BLACK_BRUSH))
SetROP2_(hdcMem,#R2_NOT)
Ellipse_(hdcMem,5,5,133,133)
DeleteDC_(hdcMem)
ReleaseDC_(0,hdc)

OpenWindow(0,0,0,310,160,"Fenster",#PB_Window_SystemMenu | 1)
ImageGadget(0,10,10,0,0,ImageID(0))
ImageGadget(1,160,10,0,0,ImageID(1))

While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend
@Stargate:
Nimm' einen anderen Mischungsmodus dann funktioniert es (bswp. #R2_LAST)
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

hää?

mag ja sein das XOR richtig arbeitet, aber dann wird der Kreis falsch gezeichnet ...

denn wenn ich n Kreis mache, und immer XOr ausführe, wieso sollte es dann ausfransen ?

Wie man sieht sind ja eindeutig "außenPixel" dazugekommen, aber woher ?

Denn :

Code: Alles auswählen

StartDrawing(ImageOutput(0)) 
Circle(69,69,64,$FFFFFF) 
DrawingMode(#PB_2DDrawing_XOr) 
Circle(69,69,64) 
StopDrawing()
muss doch 100% wieder ein komplett schwarzen bereich ergeben, wenn ich ein weißen Kreis male und dann eine Kreis mit gleichem Radius mit XOR drauflege, warum sind dann da "überPixel"

Das wäre ja nicht mal mit doppelt XOR oder mehrfach XOR zu berechtigen, der malt ja den kreis eindeutig zu groß!
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
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

STARGÅTE hat geschrieben:mag ja sein das XOR richtig arbeitet, aber dann wird der Kreis falsch gezeichnet ...
Der Kreis ist völlig in Ordnung <)
STARGÅTE hat geschrieben:denn wenn ich n Kreis mache, und immer XOr ausführe, wieso sollte es dann ausfransen ?
Ach so ..., ich dachte das wüsstest du. Der Kreis "franzt" nicht, sondern der Rand. Den musst du natürlich entfernen:

Code: Alles auswählen

CreateImage(0,256,256)

hdc = StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_XOr)
SelectObject_(hdc,GetStockObject_(#NULL_PEN))
Circle(128,128,64)
StopDrawing()

OpenWindow(0,0,0,ImageWidth(0),ImageHeight(0),"void",#PB_Window_SystemMenu | 1)
ImageGadget(0,0,0,0,0, ImageID(0))

While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend
Windows 10 Pro, 64-Bit / Outtakes | Derek
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@fluid

sorry, deinen ausführungen kann ich nicht folgen!

könntest du es bitte etwas ausführlicher erklären?

die herleitung der "bug"-meldung ist einfach:

mit simplem 2D Drawing wird ein Punkt entweder gesetzt oder gelöscht.
wenn er also mit weiß auf schwarz gesetzt wird, und die außerhalb des kreises nicht,
dann müsste er mit XOR auf schwarz pixelidentisch genauso gesetzt werden.

und jetzt erklär mir mal bitte, warum diese schlußfolgerung die fast schon Ockhams Rasiermesser gleichkommt, falsch sein sollte.
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:

Beitrag von STARGÅTE »

wieso muss das alles über API sein ?
Der Kreis "franzt" nicht, sondern der Rand. Den musst du natürlich entfernen:
das ist meiner Meinung nach nicht natürlich ^^
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
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

STARGÅTE hat geschrieben:wieso muss das alles über API sein ?
Weil PB leider immer noch keine Befehle zu Verfügung stellt mit der man die Kontur von GDI Objekten verändern kann. Warum weiß ich bis heute nicht ...
STARGÅTE hat geschrieben:das ist meiner Meinung nach nicht natürlich ^^
Ok, zugeben, eindeutig ist was anderes. Liegt wohl daran das Füllung und Rand als separate Einheiten angesehen werden.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Kann das mal einer verschieben bitte?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Antworten