[C] WINAPI: kleine Fonts auch mit antialiasing?

Micha1701

Cadet 4th Year
Registriert
März 2007
Beiträge
113
Hi!

Ich versuche grad ein kleines Spielchen zu programmieren (bzw. zu portieren). Auf der GUI wird unteranderem ein Font verwendet, welches 14 Punkte groß ist. Obwohl ich ANTIALIASED_QUALITY beim Aufruf von CreateFont() angebe ist die Schrift aber nicht anitaliased. Laut API-Reference wird ja auch nur weichgezeichnet, wenn die Schrift nicht zu klein ist. Nun sieht das aber bescheuert aus...

Wie kann ich eine kleine Schrift denn immer weichgezeichnet bekommen?
Weiß jemand rat?

Hier mal ein Screenshot, damit ihr wisst was ich meine. Die Zahlen in den Feldern sehen einfach nicht so toll aus...

sudoku.jpg
 
Hmm... ist es denn ein TrueType Font bzw. eine Vektor-Schriftart? Kannst du die Schriftart in anderen Programmen benutzen (z.B. Word) und werden dort die Kanten geglättet?
 
Hi!

Die Schrift ist ein TrueType font und wenn man sie um einige Punkte größer macht, dann wird die auch weichgezeichnet. In Word gibts genau das gleiche Verhalten. Ab einer bestimmten Größe wird die Schrift erst weichgezeichnet. Ist sie kleiner, dann wirds eben pixelig...

Ist halt ein wenig schade, ich denke es sehe besser aus, wenn die Schrift in diesem Falle immer weich gezeichnet würde...
 
Hmm in der Tat, das stimmt wohl. Allerdings bestätigt das auch meinen Verdacht, dass das eine Windows-Sache ist, an der du vermutlich mit reinen API-Mitteln nichts drehen kannst. Evtl. kann man irgendwo was in die Registry hacken, allerdings verändert man ja jede Menge anderes Zeugs damit auch.
 
Hast du in den Eigenschaften von Anzeige (Da wo du auch das Farbschema einstellst) auf ClearType gestellt? Meiner Erfahrung nach werden nur mit aktiviertem ClearType auch kleine Schriftarten weichgezeichnet. ClearType gibts aber leider erst ab Windows XP.
Ansonsten gibt es bestimmt auch möglichkeiten selbst weichzuzeichnen, indem du vielleicht die Ziffern in 32 Bit-Bitmaps (oder ein anderes Format mit 8 Bit Transparenz) speicherst und dann so zeichnest.
 
Ich will ja ungern was an den Systemeinstellungen ändern nur damit ein Font besser aussieht. Und das auch nur in diesem Falle...
Es hat ja einen Sinn, daß kleine Schriften nicht weichgezeichnet werden...

Naja, dann muß ich halt damit leben :-)
Hätt mir eben eine besser lesbare Schrift aussuchen sollen...
 
Warum zeichnest du nicht einfach deine paar Schriftzeichen die du da hast in Bitmaps?
Das ist so ziemlich der einzige Weg wirklich sicherzustellen, dass dein Programm auf allen Computern mit allen Konfigurationen gleich aussieht!
Und sooooo viel Speicher braucht das auch nicht, neun Ziffern in zwei verschiedenen Großen und noch deine beiden Symbole daneben, macht zusammen 20 kleine Bitmaps, die du dann noch als PNG komprimieren kannst, dann nimmst wahrscheinlich weniger Speicher weg als deine Schriftart.
Und du brauchst nicht extra eine neue Schriftart ins System zu installieren, ist doch auch was ;)
 
Dem letzten Tipp würde ich persönlich auch Vorzug gewähren!

Anders ausgedrückt: hätte And1.G es nicht schon gepostet, hätte ich genau dasselbe geschrieben.
 
Das ganze hat aber den äußerst hässlichen Nachteil, dass die Schrift weder mit einer DPI-Änderung noch mit einer allgemeinen Schrift-Größenänderung skaliert. Für User mit Sehschwäche oder Monitoren mit hoher Auflösung eine Zumutung.
Evtl. kann man die Schrift in eine temporäre Bitmap rendern und dann mit einer Grafik-Bibliothek deiner Wahl weichgezeichnet verkleinern lassen.
 
...oder einfach für mehrere Auflösungen die Bitmaps vorgerendert mitliefern...

Mit dem letzten Vorschlag bist Du zwar höchst dynamisch und eigentlich auf alles vorbereitet, es kostet aber viel Rechenzeit, wenn die Schrifttexte sich zu dynamisch ändern :)
 
Wäre es nicht eher schlecht wenn die Schrift mit der DPI-Einstellung des Systems skalieren würde? Weil die Grafik im Hintergrund tut das ja auch nicht. Oder irre ich mich?
 
Zurück
Oben