Seite 1 von 1
Qualität von DrawVectorText unter Win 10 schlimmer in Win 7
Verfasst: 14.03.2021 14:29
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)
Nun bin ich aber bei Windows 10, und da sieht das ganze schlimmer aus:
(Erste Zeile DrawVectorText, zweite Zeile DrawVectorParagraph)
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
Re: Qualität von DrawVectorText unter Win 10 schlimmer in Wi
Verfasst: 14.03.2021 14:40
von Mijikai
Probier mal ob #PB_Font_HighQuality bei LoadFont() eine Verbesserung bringt.
Re: Qualität von DrawVectorText unter Win 10 schlimmer in Wi
Verfasst: 14.03.2021 14:59
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.
Re: Qualität von DrawVectorText unter Win 10 schlimmer in Wi
Verfasst: 14.03.2021 15:11
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

. Ich bin am verzweifeln ...
Windows 7:
Windows 10:
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.
Re: Qualität von DrawVectorText unter Win 10 schlimmer in Wi
Verfasst: 14.03.2021 15:36
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.
Re: Qualität von DrawVectorText unter Win 10 schlimmer in Wi
Verfasst: 14.03.2021 15:40
von STARGÅTE
Habs nun auch mal unter meinem alten Ubuntu-Rechner getestet:

Hier sehen alle Texte exakt gleich aus, auch wenn das aktivierte Kerning beim Text-Zusammenstückeln Probleme machen würde.
Re: Qualität von DrawVectorText unter Win 10 schlimmer in Wi
Verfasst: 14.03.2021 18:20
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);
Re: Qualität von DrawVectorText unter Win 10 schlimmer in Wi
Verfasst: 14.03.2021 18:29
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.
Re: Qualität von DrawVectorText unter Win 10 schlimmer in Wi
Verfasst: 14.03.2021 18:38
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?
Re: Qualität von DrawVectorText unter Win 10 schlimmer in Wi
Verfasst: 14.03.2021 20:56
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