Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
GDI - Unscharfe Schrift mit DrawString()
uNki
myCSharp.de - Member



Dabei seit:
Beiträge: 58

Themenstarter:

GDI - Unscharfe Schrift mit DrawString()

beantworten | zitieren | melden

hi!

ich versuche mich daran, den office scheduler nachzubauen.

offensichtlich wird standardmäßig segoe ui als schriftart verwendet.
wenn ich versuche meine steuerelemente im scheduler damit zu beschriften, erscheint die schrift allerdings hässlich (unscharf/matschig) und nicht so schön wie im office.

hier der code:


                    using (Font fntDay = new Font("Segoe UI", 8, FontStyle.Regular, GraphicsUnit.Point))
                        g.DrawString(sTodaysName, fntDay, SystemBrushes.WindowText, rect, format);
                    
                    using (Font fntDayDate = new Font("Segoe UI", 10, FontStyle.Regular, GraphicsUnit.Point))
                        g.DrawString(" " + date.ToString(" d"), fntDayDate, SystemBrushes.WindowText, rect, formatdd);

habe schon mit g.SmoothingMode experimentiert. ändert nichts am erscheinungsbild.

habt ihr eine idee, woran es liegt?

in der vergleichsgrafik ist oben office und unten mein scheduler zu sehen.

danke!
Attachments
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo uNki,

also ich musst da schon ziemlich genau hinschauen und habe erst in mehrfacher Vergrößerung einen Unterschied gesehen (was vielleicht auch daran liegt, dass ich hier noch einen Röhrenmonitor habe). Jedenfalls gibt es bei der selbstgezeichneten Version leichte Farbsäume um die Buchstaben. Das klingt nach ClearType, einer nicht unumstrittenen Optimierung für LCD-Monitore (Subpixel-Rendering). Das kann man systemweit abschalten. Vielleicht findest du über das Stichwort weitere Informationen, wie man es beim Graphics-Objekt oder bei DrawString abschalten kann.

herbivore
private Nachricht | Beiträge des Benutzers
uNki
myCSharp.de - Member



Dabei seit:
Beiträge: 58

Themenstarter:

beantworten | zitieren | melden

hallo herbivore,

an cleartype habe ich nicht gedacht. habe das grundsätzlich deaktiviert. daher konnte ich mir nicht vorstellen, dass office 2010 unterschiedliche schrift (bei gleicher schriftart!) zaubert, als mein c#!?

naja, ich schau mal, ob ich was finde. hatte gehofft, dass hier sofort jmd. aufschreit "ach... alter hut.. stell das und das um!" :) schade
private Nachricht | Beiträge des Benutzers
uNki
myCSharp.de - Member



Dabei seit:
Beiträge: 58

Themenstarter:

beantworten | zitieren | melden

also, der tipp mit dem cleartype war gut.

lösung hat folgendes bei mir gebracht:


g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
                   
                    using (Font fntDay = new Font("Segoe UI", 11, FontStyle.Regular, GraphicsUnit.Pixel))
                        g.DrawString(sTodaysName, fntDay, SystemBrushes.WindowText, rect, format);
                    
                    using (Font fntDayDate = new Font("Segoe UI", 12, FontStyle.Bold, GraphicsUnit.Pixel))
                        g.DrawString(" " + date.ToString(" d"), fntDayDate, SystemBrushes.WindowText, rect, formatdd);

also

g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;

und GraphicsUnit.Pixel statt GraphicsUnit.Point

ergebnis:
Attachments
private Nachricht | Beiträge des Benutzers
uNki
myCSharp.de - Member



Dabei seit:
Beiträge: 58

Themenstarter:

beantworten | zitieren | melden

aber irgendwas stimmt noch nicht ganz...

die abstände zwischen den buchstaben sind im office/outlook ein wenig größer. meine wirkt recht gedrungen.

schrift ist wohl nicht gleich schrift, auch wenn in beiden fällen segoe ui dran steht :)
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo uNki,

auf deutsch nennt sich das Laufweite. Ich meine mich zu erinnern, dass es einen kleinen Unterschied hinsichtlich der Laufweite zwischen Graphics.DrawString und TextRenderer.DrawText gibt. Ich bin mir aber nicht sicher. Möglicherweise kann man die Laufweite aber auch selber festlegen.

herbivore
private Nachricht | Beiträge des Benutzers