Как получить реальные размеры текста при включенном ClearType?
Вопрос
У меня есть приложение Win32 с графическим интерфейсом, которое активно использует GDI.Ему необходимо нарисовать текст поверх растрового изображения по указанным координатам, а затем стереть его и заменить исходным растровым изображением.
Я действую следующим образом:
- выберите шрифт (GetStockObject(DEFAULT_GUI_FONT)), кисть и другие вещи в контексте устройства
- вызовите GetTextExtentPoint32(), чтобы вычислить размер текста
- теперь, имея начальную точку текста, я могу вычислить ожидаемый текстовый прямоугольник и сохранить его
- вызов TextOut() для того же контекста устройства с той же начальной точкой и тем же текстом
а затем восстановите растровое изображение для прямоугольника хранилища.
Он работает нормально, когда сглаживание ClearType отключено.Но при использовании ClearType размер, возвращаемый GetTextExtentPoint32(), немного меньше размера, фактически занимаемого текстом при вызове TextOut().Поэтому, когда я позже восстанавливаю исходное растровое изображение, некоторые небольшие полоски текста остаются на месте, и у меня появляются артефакты.
Есть ли какое-нибудь решение этой проблемы без отключения ClearType?
Решение
Вы также можете попробовать Нарисоватьтекст с DT_CALCRECT для вычисления размера строки.Возможно, это работает лучше.
Также вы можете затем написать строку с помощью DrawText внутри прямоугольника с размерами, равными размеру, который вы получаете с помощью DT_CALCRECT, и он обрежет текст, если он немного больше.