Как получить реальные размеры текста при включенном ClearType?

StackOverflow https://stackoverflow.com/questions/1259914

  •  12-09-2019
  •  | 
  •  

Вопрос

У меня есть приложение Win32 с графическим интерфейсом, которое активно использует GDI.Ему необходимо нарисовать текст поверх растрового изображения по указанным координатам, а затем стереть его и заменить исходным растровым изображением.

Я действую следующим образом:

  • выберите шрифт (GetStockObject(DEFAULT_GUI_FONT)), кисть и другие вещи в контексте устройства
  • вызовите GetTextExtentPoint32(), чтобы вычислить размер текста
  • теперь, имея начальную точку текста, я могу вычислить ожидаемый текстовый прямоугольник и сохранить его
  • вызов TextOut() для того же контекста устройства с той же начальной точкой и тем же текстом

а затем восстановите растровое изображение для прямоугольника хранилища.

Он работает нормально, когда сглаживание ClearType отключено.Но при использовании ClearType размер, возвращаемый GetTextExtentPoint32(), немного меньше размера, фактически занимаемого текстом при вызове TextOut().Поэтому, когда я позже восстанавливаю исходное растровое изображение, некоторые небольшие полоски текста остаются на месте, и у меня появляются артефакты.

Есть ли какое-нибудь решение этой проблемы без отключения ClearType?

Это было полезно?

Решение

Вы также можете попробовать Нарисоватьтекст с DT_CALCRECT для вычисления размера строки.Возможно, это работает лучше.

Также вы можете затем написать строку с помощью DrawText внутри прямоугольника с размерами, равными размеру, который вы получаете с помощью DT_CALCRECT, и он обрежет текст, если он немного больше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top