Qualität von DrawVectorText unter Win 10 schlimmer in Win 7

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Qualität von DrawVectorText unter Win 10 schlimmer in Win 7

Beitrag von STARGÅTE »

Hallo Leute,

beim "Wiedereinstieg" in den VectorDrawing-Kram, ist mir folgendes aufgefallen.
Früher (Windows 7) sahen meine Texte die ich mit DrawVectorText geschrieben habe, halbwegs gut aus.
Auch damals hatte ich schon gemerkt, dass DrawVectorParagraph ein besseres "Pixel-Fitting" durchführt,
aber auch die Texte mit DrawVectorText waren noch angenehm zu lesen.
(Erste Zeile DrawVectorText, zweite Zeile DrawVectorParagraph)
Bild

Nun bin ich aber bei Windows 10, und da sieht das ganze schlimmer aus:
(Erste Zeile DrawVectorText, zweite Zeile DrawVectorParagraph)
Bild

Liegt das an irgendwelchen "falschen" Einstellungen in Windows 10?
Sollte der PB-Code nicht immer zum selben Resultat führen?

Ich würde ja gerne DrawVectorParagraph nutzen, leider habe ich dort aber keine Chance an die gerenderte Breite zu kommen, was bei DrawVectorText() mit VectorTextWidth() geht.

Irgendwelche Vorschläge?

Hier der Test-Code:

Code: Alles auswählen

Enumeration
	#Window
	#Gadget
	#Font
EndEnumeration


LoadFont(#Font, "DejaVu Sans", 32)
OpenWindow(#Window, 0, 0, 1000, 100, "Vector Canvas Gadget", #PB_Window_MaximizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
CanvasGadget(#Gadget, 0, 0, WindowWidth(#Window), WindowHeight(#Window), #PB_Canvas_Keyboard)

If StartVectorDrawing(CanvasVectorOutput(#Gadget))
	VectorSourceColor($FF202020)
	FillVectorOutput()
	VectorSourceColor($FFE0E0E0)
	VectorFont(FontID(#Font), 14)
	MovePathCursor(20, 20)
	DrawVectorText("Du kannst den Anzeigebereich mit gedrückter Mittelmaustaste verschieben und mit dem Mausrad den Ausschnitt vergrößern/verkleiner.")
	MovePathCursor(20, 40)
	DrawVectorParagraph("Du kannst den Anzeigebereich mit gedrückter Mittelmaustaste verschieben und mit dem Mausrad den Ausschnitt vergrößern/verkleiner.", 1000, 200)
	StopVectorDrawing()
EndIf

Repeat
	Select WaitWindowEvent()
		Case #PB_Event_CloseWindow
			Break
	EndSelect
ForEver

End
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
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Qualität von DrawVectorText unter Win 10 schlimmer in Wi

Beitrag von Mijikai »

Probier mal ob #PB_Font_HighQuality bei LoadFont() eine Verbesserung bringt.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Qualität von DrawVectorText unter Win 10 schlimmer in Wi

Beitrag von ccode_new »

Das sind echt nervige Probleme beim Darstellen von Schriftarten und jedes Betriebssystem hat diese Probleme und geht anders damit um.

Du kannst mal folgendes Versuchen:
Drücke die Windows-Taste + R und geben SYSDM.CPL ein.
Gehe in die "Leistungsoptionen" und schaue ob ein Hacken bei: "Kanten der Schriftarten verfeinern" ist.

Oder/Und:
->Windows-Taste + R und: regedit
->HKEY_CURRENT_USER\Control Panel\Desktop
->Suche nach der Registrierungszeichenfolge (REG_SZ) mit dem Namen "FontSmoothing".
->Der Wert muss standardmäßig auf 2 eingestellt sein.

Vielleicht hilft das.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Qualität von DrawVectorText unter Win 10 schlimmer in Wi

Beitrag von STARGÅTE »

Mijikai hat geschrieben: Probier mal ob #PB_Font_HighQuality bei LoadFont() eine Verbesserung bringt.
Nein leider nicht.

Nun bin ich aber auf die Idee gekommen, das ich ja noch AddPathText() nutzen kann. In der Tat sieht der Text dann wieder etwas besser aus, aber was macht nun Windows 10 wieder? Es aktiviert einfach das Kerning. Warum? Damit stimmt ja wieder die gemessene Breite nicht :evil:. Ich bin am verzweifeln ...

Windows 7:
Bild

Windows 10:
Bild

Ich glaube nicht dass es "direkt" an PureBasic liegt, da PureBasic hier ja nur die Vector-Lib von Windows nutzt.
Aber vielleicht werden hier und da einfach nicht die richtigen Flags gesetzt?

Kann das mal jemand unter Linux testen?

Code zum Testen:

Code: Alles auswählen

Enumeration
	#Window
	#Gadget
	#Font
EndEnumeration


LoadFont(#Font, "DejaVu Sans", 32, #PB_Font_HighQuality)
OpenWindow(#Window, 0, 0, 1150, 180, "Vector Canvas Gadget", #PB_Window_MaximizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
CanvasGadget(#Gadget, 0, 0, WindowWidth(#Window), WindowHeight(#Window), #PB_Canvas_Keyboard)

If StartVectorDrawing(CanvasVectorOutput(#Gadget))
	VectorSourceColor($FF202020)
	FillVectorOutput()
	VectorSourceColor($FF0080FF)
	VectorFont(FontID(#Font), 12)
	MovePathCursor(5, 5)
	DrawVectorParagraph("DrawVectorText:", 300, 20)
	MovePathCursor(5, 60)
	DrawVectorParagraph("AddPathText:", 300, 20)
	MovePathCursor(5, 115)
	DrawVectorParagraph("DrawVectorParagraph:", 300, 20)
	VectorSourceColor($FFE0E0E0)
	VectorFont(FontID(#Font), 14)
	MovePathCursor(20, 20)
	DrawVectorText("AVAVAVAVAVAVAV Du kannst den Anzeigebereich mit gedrückter Mittelmaustaste verschieben und mit dem Mausrad den Ausschnitt vergrößern/verkleiner.")
	MovePathCursor(20, 40)
	DrawVectorText("AAAAAAAVVVVVVV Du kannst den Anzeigebereich mit gedrückter Mittelmaustaste verschieben und mit dem Mausrad den Ausschnitt vergrößern/verkleiner.")
	MovePathCursor(20, 75)
	AddPathText("AVAVAVAVAVAVAV Du kannst den Anzeigebereich mit gedrückter Mittelmaustaste verschieben und mit dem Mausrad den Ausschnitt vergrößern/verkleiner.")
	FillPath()
	MovePathCursor(20, 95)
	AddPathText("AAAAAAAVVVVVVV Du kannst den Anzeigebereich mit gedrückter Mittelmaustaste verschieben und mit dem Mausrad den Ausschnitt vergrößern/verkleiner.")
	FillPath()
	MovePathCursor(20, 130)
	DrawVectorParagraph("AVAVAVAVAVAVAV Du kannst den Anzeigebereich mit gedrückter Mittelmaustaste verschieben und mit dem Mausrad den Ausschnitt vergrößern/verkleiner.", 1200, 200)
	MovePathCursor(20, 150)
	DrawVectorParagraph("AAAAAAAVVVVVVV Du kannst den Anzeigebereich mit gedrückter Mittelmaustaste verschieben und mit dem Mausrad den Ausschnitt vergrößern/verkleiner.", 1200, 200)
	StopVectorDrawing()
EndIf

Repeat
	Select WaitWindowEvent()
		Case #PB_Event_CloseWindow
			Break
	EndSelect
ForEver

End
@ccode_new: Ja Haken war drin, hat aber auch keinen Einfluss auf VectorDrawing, sondern nur auf die Bildschirmsachen. Auch "FontSmoothing" ist auf 2.
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
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Qualität von DrawVectorText unter Win 10 schlimmer in Wi

Beitrag von ccode_new »

Linux/Unix -Test:

Die beiden Text-Ausgaben mit "DrawVectorText" und "DrawVectorParagraph" weisen bei mir keine Unterschied in der Darstellung auf.
(Soll ja eigentlich auch so sein. <> Anders als bei dir)

Und die Darstellung mit AddPathText ist wie zu Erwarten anders.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Qualität von DrawVectorText unter Win 10 schlimmer in Wi

Beitrag von STARGÅTE »

Habs nun auch mal unter meinem alten Ubuntu-Rechner getestet:
Bild
Hier sehen alle Texte exakt gleich aus, auch wenn das aktivierte Kerning beim Text-Zusammenstückeln Probleme machen würde.
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
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Qualität von DrawVectorText unter Win 10 schlimmer in Wi

Beitrag von Mijikai »

ClearType Antialiasing ist evtl. auch noch einen Versuch wert.

https://docs.microsoft.com/en-us/window ... tialiasing

Code: Alles auswählen

SystemParametersInfo(SPI_SETFONTSMOOTHING,
                     TRUE,
                     0,
                     SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
SystemParametersInfo(SPI_SETFONTSMOOTHINGTYPE,
                     0,
                     (PVOID)FE_FONTSMOOTHINGCLEARTYPE,
                     SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Qualität von DrawVectorText unter Win 10 schlimmer in Wi

Beitrag von STARGÅTE »

Auch dir danke für diese Infos.
Auch deine Lösung ändert nur das Verhalten in Windows (bzw. wie z.B. DrawText arbeitet).
Ich glaube die VectorDrawing-Lib setzt eigene Parameter.

Mir ist der weile noch aufgefallen, dass DrawVectorParagraph() ClearType benutzt (blaue und rote fransen ^^) wo hingegen DrawVectorText() und AddPathText() nur Kandenglättung verwenden.
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
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Qualität von DrawVectorText unter Win 10 schlimmer in Wi

Beitrag von NicTheQuick »

Kommt es vielleicht auf den darunter liegenden Kontext an? Bei einer Schrift, die direkt auf den aktuellen Bildschirm gerendert wird, kann man ClearType ja richtig nutzen, weil es dann echte Subpixel gibt. Aber schreibt man den Text auf Image, wird das vielleicht anders gehandhabt, weil dann ja noch nicht klar ist wie der Text später wirklich auf dem Bildschirm angezeigt wird, womöglich wird das Bild im Nachhinein ja noch um 90° gedreht oder auf einem ganz anderen Bildschirm dargestellt, auf dem die Subpixel anders angeordnet sind.
Ich kann das jetzt nicht weiter erörtern, aber ich wollte die Idee mal in den Raum werfen. Also macht es einen Unterschied, ob ImageOutput, WindowOutput, ScreenOutput oder CanvasOutput genutzt wird?
Bild
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Qualität von DrawVectorText unter Win 10 schlimmer in Wi

Beitrag von ccode_new »

Naja,
insgesamt ist es wohl ein Windows 10 - Problem und nicht ein direktes Problem von PureBasic, oder?
Unter Windows 7 funktioniert es doch richtig, oder?

Unter Linux kann man auch mal mit diesem Tool herrumprobieren:
-> "sudo dpkg-reconfigure fontconfig-config"
-> "sudo reboot", oder "sudo pkill X", oder STRG+ALT+BACKSPACE

(Ohne Subpixel-Rendering sieht es bei mir unter Linux auch bei allen Darstellungsarten gleich aus.)

In der Hilfe zu "AddPathText()" steht folgendes:
Anmerkungen

Das Konvertieren von Text in einen Pfad ist ein aufwändiger Vorgang und kann zu einem Verlust an Textqualität und sogar zu einer etwas anderen Textform (je nach Schriftart) führen - im Vergleich zum direkten Zeichnen des Textes auf die Ausgabe mittels DrawVectorText(). Die DrawVectorText() Funktion ist effizienter und kann Methoden wie "Subpixel-Rendering" verwenden, um die Textqualität zu verbessern. Daher sollte die AddPathText() Funktion nur dann verwendet werden, wenn der Text ausdrücklich als ein Pfad benötigt wird und nicht nur für eine einfache Textzeichnung
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Antworten