[Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Beitrag von DarkDragon »

Echt cool unter PB 4.60b2 x86 :allright: ! Bei PB 4.60b2 x64 gibt es allerdings einen Assembler-Error:

Code: Alles auswählen

---------------------------
PureBasic - Assembler error
---------------------------
PureBasic.asm [3438]:

 PUSH qword 8589934591

error: value out of range.


---------------------------
OK   
---------------------------
Funktioniert das mit der neuen PB 4.60b3 x64 Version?

Ich hätte da noch einen Wunsch, den ich bei den PB Befehlen stark vermisse: ich will eine Transformation angeben können und alle Objekte, die danach gezeichnet werden, werden durch diese Transformation manipuliert.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Beitrag von ts-soft »

>> Funktioniert das mit der neuen PB 4.60b3 x64 Version?
Nein, selber Fehler!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Beitrag von Falko »

dito.
Wenn man alle Color.q durch Color.i ersetzt, werden die Grafiken zwar angezeigt, aber
der Schatten wird dann auch weiß.

[Edit]
#gNOCOLOR = $1FFFFFFF
Ein F zuviel. So läuft's bei X86 und 64-Bit-PB korrekt.
[/Edit]


Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Beitrag von SoS »

ts-soft hat geschrieben:>> Funktioniert das mit der neuen PB 4.60b3 x64 Version?
Nein, selber Fehler!
Hier ebenfalls.
Allerdings läuft der Code aus dem alten Thread unter PB 4.60b3 x64.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Beitrag von Falko »

SoS hat geschrieben:
ts-soft hat geschrieben:>> Funktioniert das mit der neuen PB 4.60b3 x64 Version?
Nein, selber Fehler!
Hier ebenfalls.
Allerdings läuft der Code aus dem alten Thread unter PB 4.60b3 x64.
Der Code hat ja auch kein #gNOCOLOR = $1FFFFFFFF
wo ein F zu viel ist.
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Beitrag von SoS »

Falko hat geschrieben:wo ein F zu viel ist.
Stimmt,muss man erst mal finden.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Beitrag von Falko »

SoS hat geschrieben:
Falko hat geschrieben:wo ein F zu viel ist.
Stimmt,muss man erst mal finden.
Die Fehlermeldung dazu war ja folgende:
PB-IDE-64Bit hat geschrieben:---------------------------
PureBasic - Assembler error
---------------------------
PureBasic.asm [2110]:

PUSH qword 137438953471

error: value out of range.


---------------------------
OK
---------------------------
Da dort qword steht, was aussagt, das der Wert in Quad ausserhalb der Grenze liegt,
habe ich nach den Variablen mit .q gesucht. Also kam da nur color heraus. und was diesem
Color dann übergeben wurde, ist diese Konstante. Darum konnte man das finden.

Übrigens funktioniert das auch einfach mit #gNOCOLOR = 0 bei beiden Bit-Versionen von PB.
Ich konnte da keinen Unterschied sehen.

Damit die Schatten auch dem entsprechen, was die Zeichnungen anzeigen, habe ich auch das
gSetPenCaps(#LineCapRound,#LineCapArrowAnchor)
gleich hier zwischen eingesetzt. Ist nur eine kleine Schönheitskorrektur:

Code: Alles auswählen

If gInit()
    img = CreateImage(#PB_Any,850,600,24)
    If gStartDrawing( ImageOutput(img) )
        gClear( RGBA($80,$80,$80,$FF) )
        gDrawingMode(#PB_2DDrawing_Outlined)
        gSetPen(RGBA($40,$40,$40,$FF),5)
        gBox(50,50,100,100)
       
       ;.....
       gSetPenCaps(#LineCapRound,#LineCapArrowAnchor)
       ;....
Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Beitrag von STARGÅTE »

Meiner Meinung nach sollten das doch 8 F und n 1 sein, damit das hier:
Problem mit 32-Bit-Farbe als optionaler Parameter

Deswegen muss man hier Quads übergeben, um sicher zu sein, wann wirklich eine Farbe übergeben wurde.
Und Default ist dann etwas über $FF FF FF FF also zB $1 00 00 00 00
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
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Beitrag von Danilo »

Hallo,

und erstmal vielen Dank für den vielen Dank und die
Motivation weiter zu machen! :)
Habe heute auch schon weitergemacht und 2 neue Befehle
eingebaut. Werde aber erst noch weiter machen und die
nächste Version dann in den nächsten 1 oder 2 Tagen
hier rein stellen.

Zu dem Fehler:
$1FFFFFFFF ist ein legaler Wert für den Variablentyp Quad.
Das muß so sein, wie STARGÅTE bereits sagte, um zwischen
"Farbe" und "keine Farbe" zu unterscheiden.
RGBA()-Farben können schließlich den kompletten Long-Raum (32bit)
einnehmen. Man kann also nicht $1FFFFFFF nehmen, da dass dann
eine legale Farbe wäre.

Festzustellen ist: PureBasic gibt keinen Syntaxfehler oder bemängelt
irgend etwas. Auf x86 läuft es wie es soll. Auf x64 gibt es einen
Assemblerfehler. Der Assembler meint $1FFFFFFFF ist kein
legales qword (Quad, 64bit), was imho nach einem Fehler im Assembler
aussieht.

Der Assemblerfehler kommt bei Default-Parameter vom Typ Quad:

Code: Alles auswählen

Procedure myBox(x.f, y.f, width.f, height.f, color.q=$1FFFFFFFF)
    If color = $1FFFFFFFF
        ProcedureReturn x+y+width+height
    EndIf
EndProcedure


myBox(1,2,3,4,$FFFFFFFFFFFFFF)  ; OK
myBox(1,2,3,4,$1FFFFFFFF)       ; OK
myBox(1,2,3,4,5)                ; OK

myBox(1,2,3,4)                  ; Assembler Error with default .q parameter
Das sollte einen Bugreport wert sein.

EDIT:
Der Unterschied im generierten Assemblercode:

Code: Alles auswählen

; myBox(1,2,3,4,$FFFFFFFFFFFFFF)  ; OK
  SUB    rsp,8
  MOV    rax,72057594037927935
  PUSH   rax
[...]
; myBox(1,2,3,4)                  ; Assembler Error with default .q parameter
  SUB    rsp,8
  PUSH   qword 8589934591
Das sieht danach aus, als wenn es nicht erlaubt ist direkt qwords
auf den Stack zu pushen. Das würde heißen, PB generiert falschen
ASM-Code.
PB müßte dann auch für Default-Parameter den Code über das Register
generieren, der korrekt geht.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Beitrag von Falko »

Danilo hat geschrieben:Habe heute auch schon weitergemacht und 2 neue Befehle
eingebaut. Werde aber erst noch weiter machen und die
nächste Version dann in den nächsten 1 oder 2 Tagen
hier rein stellen.
:allright: Ich freue mich schon darauf. Prima Arbeit, die unter Windows sehr nützlich ist :allright:



Das mit dem ASM-Fehler ist sowieso komisch, da die 32-Bit-Version von PB überhaupt nicht darauf
reagiert, auch wenn ich diesen Wert um weitere $F's erhöhe.

Blödes Beispiel unter PBX86
Damit meine ich, das es max. #gNOCOLOR = $1FFFFFFFFFFFFFFF geht.
Ein weiteres F zeigt mir keinen ASM-Fehler an, sondern einen Überlauf.
X86-PB hat geschrieben:---------------------------
PureBasic
---------------------------
Zeile 108: Numerischer Überlauf: zu große Zahl.
---------------------------
OK
---------------------------
Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten