[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.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

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

Beitrag von STARGÅTE »

Beispiel? Was ist x und y ?
Ich meine im Zusammenhang mit Drawing-Befehle, ist es für mich etwas seltsam von FPS zu sprechen,
da es meiner Meinung nach nicht für Echtzeit-Sachen gedacht ist.

Daher würde ich gerne mal ein Beispiel von dir sehen, was du dann "ununterbrochen" Zeichnest.
Zumal du bei Angabe zu FPS bitte immer den Debugger und die Synchronization ausschalten musst.
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
Codusa
Beiträge: 92
Registriert: 11.07.2009 09:44

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

Beitrag von Codusa »

Bei meiner Auflösung von 1920x1080 ist x= 598 und y= 200. Mit oder ohne Debugger ist egal, vsync ist an.
Wenn ich x auf 597 setze halbiert sich die fps, bei 596 ist wieder alles gut bei 595 wieder nicht.

Ich zeichne die RoundBox() als "Progressbar", ich wollte das eigentlich nicht immer auf ein Sprite zeichnen, lasse mich aber gerne umstimmen.

-EDIT-

Ich zeichne es auf ein Sprite und lass dieses dann anzeigen :D
Trotzdem herzlichen Dank!
"I became insane, with long intervals of horrible sanity." - Edgar A. Poe
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

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

Beitrag von STARGÅTE »

Hallo Danilo,

irgendwie besteht immer noch das Problem, das gTextWidth() nicht den TextAntialiasMode berücksichtigt.
Du hattest dir das zwar schon mal angesehen, aber hier ist es zum Beispiel immer noch deutlich sichbar:
Bild

Code: Alles auswählen

Enumeration
   #Image
EndEnumeration

XIncludeFile "gDrawing.pbi"

gInit()

CreateImage(#Image, 900, 300, 32|#PB_Image_Transparent)

Define Text.s = "Das ist ein ganz langer Text, von dem die Breite ermittelt wird"
gStartDrawing(ImageOutput(#Image))
   gSetFont("Verdana", 24)
   gClear($FFFFFFFF)
   gSetTextAntialiasMode(#TextAntialiasMode_SystemDefault)
   gBox(0, 0, gTextWidth(Text), gTextHeight(Text), $FFC0C0C0)
   gDrawText(0, 0, Text, $FF000000)
   gSetTextAntialiasMode(#TextAntialiasMode_ClearTypeGridFit)
   gBox(0, 60, gTextWidth(Text), gTextHeight(Text), $FFC0C0C0)
   gDrawText(0, 60, Text, $FF000000)
   gSetTextAntialiasMode(#TextAntialiasMode_AntiAlias)
   gBox(0, 120, gTextWidth(Text), gTextHeight(Text), $FFC0C0C0)
   gDrawText(0, 120, Text, $FF000000)
gStopDrawing()

OpenWindow(#PB_Any, 0, 0, ImageWidth(#Image), ImageHeight(#Image), "Image", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ImageGadget(#PB_Any, 0, 0, ImageWidth(#Image), ImageHeight(#Image), ImageID(#Image))

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

gEnd()
Wäre echt nett, wenn du da noch mal gucken könntest.
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 »

STARGÅTE hat geschrieben:Wäre echt nett, wenn du da noch mal gucken könntest.
Dauert paar Tage, habe aber noch eine Möglichkeit zur Hand. Wenn Diese auch nicht PixelPerfekt korrekt funktioniert,
dann bleibt nur noch den Text mit bisherigem gTextWidth() auf ein neues Bild zu zeichnen und dann von hinten
angefangen zu scannen, bis der erste sichtbare Pixel kommt. Die GDI+ Funktionen sind da leider nicht so genau, ist bekanntes Problem.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

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

Beitrag von STARGÅTE »

Ich dachte, dass ich einfach alles was in gDrawText steht in gTextWidth kopiere, aber so einfach gings leider auch nicht ...
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 »

STARGÅTE hat geschrieben:Ich dachte, dass ich einfach alles was in gDrawText steht in gTextWidth kopiere, aber so einfach gings leider auch nicht ...
GdipMeasureString_() ist nicht ganz genau, und in der Hilfe dazu steht das man #TextAntialiasMode_AntiAlias setzen muss.
Mit #TextAntialiasMode_AntiAlias funktioniert es ja korrekt, nur mit den anderen AA modes nicht.
Ich hoffe mit GdipMeasureCharacterRanges_() geht es korrekter. Sonst bleibt nur der Weg mit dem Scannen der Pixel.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Delle
Beiträge: 1118
Registriert: 10.05.2005 22:48

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

Beitrag von Delle »

Gibt's in der Lib auch eine Funktion wie die native FillArea(), nur eben mit Antialiasing?
PB 6.02 LTS + Win 11
Benutzeravatar
Delle
Beiträge: 1118
Registriert: 10.05.2005 22:48

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

Beitrag von Delle »

Benutzt das Teil hier eigentlich noch jemand?

In der Demo zeigen mir folgende "Kommandos" nichts an:

- gLine
- gBezier
- gTriangle
- gPoly
PB 6.02 LTS + Win 11
Antworten