34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 334
1

Качество отрисовки текста у TextRenderer.DrawText

29.01.2018, 04:56. Показов 1775. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Микрософт заявлял что GDI будет производительнее чем GDI+, но по факту почему-то Graphics.DrawString на максимальном качестве отрисовывает текст (да и Measure у Graphics считает размер) раз в 10 быстрее чем хваленый микрософтом TextRenderer.

В общем есть ли возможность как-то понизить качество отрисовки у TextRenderer?
Нашел инфу про какую-то структуру LOGFONT
https://msdn.microsoft.com/en-... s.85).aspx
в которой можно понизить качество отображаемого качества текста наподобие как для Graphics.
вот пруф с картинками: https://stackoverflow.com/ques... er-quality

Но моя что-то не понимать как эту структуру юзать

---
Отрисовывать текст посредством Graphics.DrawString не вариант, ибо есть у него небольшие косячки в отрисовки, которых нет у TextRenderer.
Или может кто подскажет почему TextRenderer такой тормозной пациент, может пациента можно вылечить?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.01.2018, 04:56
Ответы с готовыми решениями:

DrawText наложение текста
Всем привет! У меня появилась проблема, при перерисовке через DrawText происходит наложение...

Местоположение текста (DrawText)
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId,...

DrawText и перемещение текста в окне по вертикали
DrawText рисует текст в прямоугольнике структуры RECT и выводит в графическое окно, но как его...

Вывод текста не экран с помощью DrawText (DirectX)
Здравствуйте, проблема такая: пытаюсь вывести текст на экран, если я пишу вот так...

2
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
29.01.2018, 08:57 2
Цитата Сообщение от Fakels Посмотреть сообщение
Отрисовывать текст посредством Graphics.DrawString не вариант, ибо есть у него небольшие косячки в отрисовки, которых нет у TextRenderer.
Похоже, что за качество приходится платить.
Судя по тому, что класс TextRenderer появился во второй версии фреймворка и все еще тормозит, МС вряд ли его починит.

Попробуйте вместо него использовать нативную отрисовку.
Сравните производительность и качество отрисовки.
1
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 334
30.01.2018, 01:43  [ТС] 3
Лучший ответ Сообщение было отмечено Fakels как решение

Решение

Цитата Сообщение от kolorotur Посмотреть сообщение
Похоже, что за качество приходится платить.
ну само качество отрисовки у них одинаковое, но вот Graphics.MeasureString в измерение строки в его конец вставляет зачем-то пробел и считает его - зачем не понятно, флагами формата StringFormatFlags это ни как не устраняется, помогает избавиться от этих пробелов в измерении если использовать GenericTypographic режим, но появляются новые косяки в отображении строк - в общем не все слава богу

Цитата Сообщение от kolorotur Посмотреть сообщение
Попробуйте вместо него использовать нативную отрисовку.
Попробую прикрутить нативку, глянем как оно себя поведет.
Там у человека кстати тесты есть производительности, по его подсчетам TextRenderer в 6 раз медленнее чем Graphics.


Добавлено через 8 часов 21 минуту
Прикрутил нативный метод отрисовки, у него приблизительно такая-же скорость как у Graphics но чуть по медленнее, и
видимо из-за того что каждый раз приходится делать Dispose после каждой отрисовки нативным методом,
иначе при дальнейшей отрисовки других объектов посредством Graphics создается исключение, что этот объект занят.

т.е нативые методы я использую так:
C#
1
2
3
nativeRender = new NativeTextRenderer(g);
nativeRender.DrawString(...);
nativeRender.Dispose();
Сама студия в подсказке говорит, что надо использовать ReleaseHdc() после использования GetHdc()
Но я не понимаю что это такое и где его использовать?
Мне бы хотелось чтобы объект nativeRender создавался при вызове OnPaint формы один раз, а не создавать его экземпляр каждый раз перед отрисовкой/измерением куска текста.
Как нужно применить этот ReleaseHdc()?

------------------
Кстати говоря хочу сказать, что нативный метод работает так же хорошо как и TextRenderer, но не так тормозно.
Вот мои замеры отрисовки страницы текста на форму
TextRenderer: 95-125ms
Graphics: 10-25ms
Native: 15-30ms
0
30.01.2018, 01:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.01.2018, 01:43
Помогаю со студенческими работами здесь

Помогите получить HDC принтера вывести печать текста функцией DrawText
Написал программку (для бух.) и хочу сделать свою процедуру печати. Помогите получить HDC принтера...

Ошибка при рисовании текста - в XE3 не линкуется метод TCustomStyleServices::DrawText()
#include <System.Types.hpp> #include <Vcl.Themes.hpp>...

Качество текста: монитор и видеокарта
Всем доброго вечера. Заранее прошу прощения, буков будет немало. Приобрел монитор lg...

Плохое качество печати - грязное дублирование текста
Здравствуйте! Принтер HP LaserJet 5P. Стал грязно печатать. Заменил картридж на новый из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru