Wie kann ich die ClearType-Einstellung beim Zeichnen von Text mithilfe der Win32-API überschreiben?

8

Ich habe eine kleine Anwendung geschrieben, die Text auf In-Memory-Bildern zeichnet und in Dateien schreibt. Der grundlegende Delphi-Code sieht folgendermaßen aus:

%Vor%

Leider unterscheidet sich der gezeichnete Text je nach ClearType-Einstellung des Computers, auf dem die Anwendung ausgeführt wird. Ich möchte eine konsistente Ausgabe in meiner Anwendung haben, unabhängig von der lokalen ClearType-Einstellung (die Ausgabe wird sowieso nicht direkt angezeigt). Gibt es eine Win32-API-Option zum Überschreiben der lokalen ClearType-Einstellungen?

    
blerontin 25.02.2013, 15:49
quelle

2 Antworten

12

Die Schriftglättung von Text wird durch die Schriftart bestimmt, die Sie in das Gerät auswählen. Weitere Informationen zu den Optionen, die von der Raw-Win32-Benutzeroberfläche angeboten werden, finden Sie in der LOGFONT Dokumentation.

In Delphi ist die zugrunde liegende Win32-API-Font-API von der Klasse TFont umschlossen. Die Eigenschaft, die für diese Frage relevant ist, ist Quality . Der Standardwert ist fqDefault , der die systemweite Schriftglättungseinstellung verwendet. Sie möchten Quality entweder auf fqAntialiased oder fqNonAntialiased setzen.

Ältere Versionen von Delphi haben diese Eigenschaft nicht. In diesem Fall müssen Sie CreateFontIndirect aufrufen, um ein HFONT mit den erforderlichen Qualitätseinstellungen zu erstellen. Sie können diese Funktion , unmittelbar bevor Sie Text zeichnen:

%Vor%

Übergeben Sie je nach Bedarf entweder NONANTIALIASED_QUALITY oder ANTIALIASED_QUALITY .

    
David Heffernan 25.02.2013, 15:56
quelle
6

Ich glaube, Sie können eine neue logische Schriftart erstellen, die keinen ClearType verwendet. Übergeben Sie das Flag NONANTIALIASED_QUALITY als fdwQuality -Parameter von CreateFont :

  

Die Schriftart wird niemals antialiasiert, dh die Schriftglättung wird nicht durchgeführt.

    
Andreas Rejbrand 25.02.2013 15:55
quelle

Tags und Links