TextOut ohne Aliasing

Antworten
Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

TextOut ohne Aliasing

Beitrag von Timm Thaler »

Haben die Einstellungen zur FontQuality unter Linux überhaupt eine Wirkung?

Code: Alles auswählen

    iHNDcset.Canvas.Font.Quality := fqNonAntialiased;
Ich zeichne auf ein TBitmap Canvas mit TextOut einzelne Buchstaben eines Bitmap-TTF-Fonts*, um die Pixel dann in Hex-Daten für ein graphisches LC-Display umzuwandeln.

Allerdings egal was ich für FontQuality einstelle werden die Buchstaben immer mit Antialiasing gezeichnet. Sprich sie haben entsprechende graue oder farbige Ränder, was natürlich für ein Umwandeln in schwarz-weiss-Grafik Probleme macht.

Nur wenn ich in den Systemeinstellungen** Kantenglättung und Hinting abschalte, wird der Font ohne Antialiasing auf das Bild gebracht. Aber dann sehen halt alle Schriften in allen Programmen auf dem Bildschirm entsprechend mies aus.

Geht das unter Linux prinzpiell nicht, dass man AntiAliasing gezielt abschaltet?

*) ein Font, der Pixelgrafik als TTF darstellt, z.B.: https://www.dafont.com/de/vcr-osd-mono.font
**) Linux Mint

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: TextOut ohne Aliasing

Beitrag von Winni »

Hi!

Das AntiAliasing erledigt unter Linux der X-Server.

Du kannst es nur global an- oder ausschalten..

Nach einer Änderung muss der X-Server neu gestartet werden.


Ich wüsste einen groben Trick unter BGRA:

Schreib Deinen Text auf eine BGRABitmap mit verkleinertem Font.
Mach ein Resample auf die gewünschte Größe mit dem ResampleMode "rmSimpleStretch"
Dann hast Du den Text auf einer BGRABitmap ohne AntiAlias

Winni

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: TextOut ohne Aliasing

Beitrag von theo »

Mit Freetype sollte das zu schaffen sein.

Ein Bsp. wie das prinzipiell geht, findest du in lazarus/examples/lazfreetype/
Einfach alle Einstellungen auf mies setzen:

Code: Alles auswählen

ftFont1.Hinted := false;
ftFont1.ClearType := false;
ftFont1.Quality := grqMonochrome;   
Sieht dann in der Vergrösserung so aus (Der rote Font ist zum Vergleich):

truetype.png
truetype.png (36.19 KiB) 835 mal betrachtet

Antworten