텍스트 렌더링을하는 C# 응용 프로그램을 가지고 있는데, 간단한 wysiwyg 텍스트 편집기와 비슷합니다.TextRenderer.DrawText는 XP와 Vista에서 Arial을 다르게 렌더링합니다.
TextRenderer.DrawText를 사용하여 텍스트를 화면에 렌더링하고 GetTextExtentPoint32를 사용하여 텍스트를 측정하므로 같은 줄에 다른 글꼴 스타일/크기를 배치 할 수 있습니다.
Vista에서는 모두 정상적으로 작동합니다. 그러나 XP에서는 Arial이 다르게 렌더링됩니다. 'o'와 'b'와 같은 특정 문자는 Vista에서보다 폭이 넓습니다. GetTextExtentPoint32는 Vista에서와 같이 문자열을 측정하는 것으로 보이지만 더 작은 너비로 나타납니다. 최종 결과는 선행 텍스트가 화면에 실제로 표시되는 것보다 더 작게 측정되기 때문에 매 순간마다 텍스트가 연속되는 텍스트와 겹칠 것입니다.
또한 내 텍스트 렌더링 코드는 텍스트를 정확하게 표현합니다 (간단한 형식 지정 및 영어 만 해당). 즉 텍스트 렌더링은 Vista와 XP간에 일관성이있는 것 같습니다. 다른 문자의 크기가 어떻게 변했는지 알았습니다.
누구에게 무슨 일이 일어나고 있는지 아이디어가 있습니까?
요약하면 TextRenderer.DrawText와 GetTextExtentPoint32는 XP에서 Arial과 일치하지 않습니다. DrawText는 Vista에서보다 크고 작은 특정 문자를 그리는 것으로 보이지만 GetTextExtentPoint32는 Vista에서 텍스트를 측정하는 것처럼 보입니다. (즉, XP와 Vista 모두에서 텍스트 렌더링과 일치하는 것처럼 보입니다.) 희망은 그 말이 맞습니다.
참고 : 불행히도 TextRenderer.MeasureString이 내 요구 사항을 충족 할만큼 빠르지 않거나 정확하지 않습니다. 나는 그것을 사용하려고 시도하고 그것을 찢어 버려야했다.
+1 나는 당신이 상대하고있는 것을 알고 있기 때문에! 그리고 고정 폭 글꼴 만 처리해야했습니다. – leppie
DPI 또는 Cleartype이 아닌 것이 확실합니까? –