Mam aplikację C#, która renderuje tekst, coś na równi z prostym edytorem tekstu WYSIWYG.TextRenderer.DrawText renderuje Arial inaczej na XP vs Vista
Używam TextRenderer.DrawText do renderowania tekstu na ekranie i GetTextExtentPoint32 do pomiaru tekstu, dzięki czemu mogę ustawić różne style/rozmiary czcionek w tej samej linii.
W systemie Vista wszystko działa poprawnie. W XP jednak Arial renderuje się inaczej, niektóre znaki takie jak "o" i "b" zajmują więcej szerokości niż w Vista. Wydaje się, że GetTextExtentPoint32 mierzy ciąg znaków w taki sposób, jak w Vista, o mniejszych szerokościach. Końcowym rezultatem jest to, że co jakiś czas bieg tekstu pokrywa się z tekstem poprzedzającym go, ponieważ poprzedni tekst jest mierzony jako mniejszy niż faktycznie znajduje się na ekranie.
Ponadto, mój kod renderujący tekst jest dokładnie taki, jak np. Renderowanie tekstu (tylko dla prostego formatowania i języka angielskiego), a więc renderowanie tekstu wydaje się być spójne między vistem i xp - tak zauważyłem zmianę rozmiaru różnych znaków.
Ktoś ma jakieś pomysły na temat tego, co się dzieje?
Krótko mówiąc, TextRenderer.DrawText i GetTextExtentPoint32 nie pasują do Xp dla Arial. DrawText wydaje się rysować pewne znaki większe i/lub mniejsze niż w Vista, ale GetTextExtentPoint32 wydaje się mierzyć tekst tak, jak w systemie Vista (co wydaje się pasować do renderowania tekstu w np. Na XP i Vista). Mam nadzieję, że ma to sens.
Uwaga: niestety TextRenderer.MeasureString nie jest wystarczająco szybki i dokładny, aby spełnić moje wymagania. Próbowałem go użyć i musiałem go zgrać.
+1 Ponieważ wiem, z czym masz do czynienia! A miałem tylko do czynienia z czcionkami o stałej szerokości. – leppie
Jesteś pewien, że nie jest to problem typu DPI lub Cleartype? –