Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
[progeR]
30 / 8 / 0
Регистрация: 20.08.2011
Сообщений: 605
#1

Алгоритмы отображения большого текста на экране - C++

20.08.2011, 15:17. Просмотров 1232. Ответов 15
Метки нет (Все метки)

Привет всем!
Может быть кто знает, есть какие-нибудь алгоритмы, позволяющие быстро отображать тексты больших размеров?
Дело в том, что пишу читалку fb2, и там нужно выводить отпарсиный текст на экран (текст парсится в html формат). Тексты разные - например Л.Н. Толстой - Война и мир. Книга большая и если в лоб делать, то процесс отображения может занимать много времени. Уже намучился с этим, не знаю, что делать. Т.к. это книга - значит текст форматированный (кстати может содержать картинки), и алгоритм, вроде подсчета строк, которые могут уместиться на экран, вроде и не применишь.
Подобные ридеры есть - например CoolReader. Отображает текст быстро. Но где там найти сей алгоритм - не знаю. Исходники смотрел - черт ногу сломит с их этим кодом... В общем, рассчитываю на вашу помощь.

Ps если что, читалку делаю на Qt.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2011, 15:17     Алгоритмы отображения большого текста на экране
Посмотрите здесь:

Отображения на экране чисел от 10 до 0 - C++
Всем доброго времени суток. Суть простой задачи. Подскажите алгоритм работы программы. Необходимо написать программу которая...

Листание текста на экране - C++
На экран выводится файл, который можно листать вперед или назад. По выведенному на экран тексту можно перемещать курсор, который при...

SDL Отображение текста на экране - C++
Вывожу на экран текст формата *.ttf c помощью функции TTF_Render Эта функция может выводить только текст, а вот как вывести значение...

1% от большого числа - C++
Вводится число 10^6<=N<=10^200 Надо вывести 1% от него. Кто-нибудь может это решить, я очень много времени потратил...

Объявление большого массива в C++ - C++
Здравствуйте. Не могу разрешить такую задачу: нужен массив int a;, при выполнении выдается Stack Overflow, я понимаю что скорее...

Деление большого числа - C++
Суть такова: Реализовываю класс для системы остаточных классов, нужно считать большое число ( допустим больше 20 знаков), понятное дело что...

Модуль большого числа - C++
Доброго времени суток. Вот такая проблема. Имеется большое число, тип long double, нужно найти остаток от деления на 43, к примеру....

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
агерон
268 / 267 / 33
Регистрация: 12.10.2009
Сообщений: 1,057
20.08.2011, 16:15     Алгоритмы отображения большого текста на экране #2
для обработки больших файлов существует технология маппинг файлов. но как я понимаю проблема не в объеме файла а в скорости его обработки т. к. формат fb2 является XML подобным форматом, поэтому попробуй подключить парсер XML типа SAX
[progeR]
30 / 8 / 0
Регистрация: 20.08.2011
Сообщений: 605
20.08.2011, 16:22  [ТС]     Алгоритмы отображения большого текста на экране #3
Нет, не в объеме. Обычное художественное произведение весит от силы 1 МБ. Так сам парсер я написал, и работает он очень быстро, обработка файла - ежесекундно. А вот как все это вывести на экран? Вот проблема. Вот взять Антуан Де Сент-Экзюпери: Цитадель (~1,66МБ). Парсит, наверное, десяток миллисекунд, а выводит на экран ~3-4 секунды.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.08.2011, 16:29     Алгоритмы отображения большого текста на экране #4
Цитата Сообщение от [progeR
;1927200]а выводит на экран ~3-4 секунды.
А ты выводи не весь текст, а постранично (поэкранно).
[progeR]
30 / 8 / 0
Регистрация: 20.08.2011
Сообщений: 605
20.08.2011, 16:43  [ТС]     Алгоритмы отображения большого текста на экране #5
Ну это понятно. А если хочу со скроллингом сделать? Чтобы прокрутить можно было любой кусок.
Например FireFox тоже умеет читать эти книги. И там сделано с прокруткой. И выводится все тоже очень быстро.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.08.2011, 16:49     Алгоритмы отображения большого текста на экране #6
Потому что выводится постранично. Не стоит думать, что в ридерах рисуется сразу весь текст, а потом прокручивается. Это не так. Скролер лишь указывает, какую часть текста показать.
[progeR]
30 / 8 / 0
Регистрация: 20.08.2011
Сообщений: 605
20.08.2011, 17:02  [ТС]     Алгоритмы отображения большого текста на экране #7
Тогда для скролбара нужно как рассчитать максимальное значение. В случае обычного текста сделать не сложно. А как для текста в html?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.08.2011, 17:16     Алгоритмы отображения большого текста на экране #8
Выполнить такой же обход дерева, как и при отрисовке, но не выполняя её, а только вычисляя размер. Хотя, в том же вконтакте, например, высота не вычисляется и скроллбар масштабируется в процессе прокрутки, т.е. если конец текста не достигнут и нужно отмотать, то к известной величине добавляется ещё чуток высоты следующего блока текста.
Но ведь в формате fb2 количество страниц известно? Тогда проблемы не должно быть.
[progeR]
30 / 8 / 0
Регистрация: 20.08.2011
Сообщений: 605
20.08.2011, 17:31  [ТС]     Алгоритмы отображения большого текста на экране #9
Нет, не известно кол-во страниц. И это количество зависит от используемого шрифта, его размера, наличия картинок. А масштабируемый скролбар - не вариант, так никто не делает.

А про обход дерева - это хорошо, вот только в Qt ничего подобного не видел. Это все скрыто в том самом методе, который выводит html текст на экран...
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.08.2011, 18:55     Алгоритмы отображения большого текста на экране #10
Цитата Сообщение от [progeR
;1927339]А масштабируемый скролбар - не вариант, так никто не делает.
ВинДежавю так делает. Высота скроллбара уточняется в процессе...
В общем, у тебя и выбора-то особо нет. Либо рисовать всё (медленно), либо вычислять высоту всего (ты не знаешь как) либо делать примерно.
[progeR]
30 / 8 / 0
Регистрация: 20.08.2011
Сообщений: 605
20.08.2011, 19:07  [ТС]     Алгоритмы отображения большого текста на экране #11
И тем не менее все читалки вычисляют точно. Даже если текст html. Вот как CoolReader делает? Как веб-браузеры делают? Как Word делает?
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
20.08.2011, 20:54     Алгоритмы отображения большого текста на экране #12
FBReader точно делает странично. Как и отписали выше.
за основу берется начало отображаемого текста (смещение от начала), вычисляется размер страницы (шрифт, междустрочный интервал), из имеющейся инфы вычисляется количество страниц, и размер/положение скроллера. Ничего мудреного.
[progeR]
30 / 8 / 0
Регистрация: 20.08.2011
Сообщений: 605
21.08.2011, 00:11  [ТС]     Алгоритмы отображения большого текста на экране #13
А как узнать, сколько слов уместится на одной линии?
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
21.08.2011, 00:13     Алгоритмы отображения большого текста на экране #14
а что используется в качестве "рисовалки" текста?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2011, 00:24     Алгоритмы отображения большого текста на экране
Еще ссылки по теме:

Факториал большого числа - C++
Доброго времени суток! Захотелось вычислить факториал большого числа. Наткнулся на gmp. Посмотрел это...

Компиляция большого проекта - C++
Здравствуйте уважаемые программисты. Есть очень большой проект c++, + data base мне надо компилировать его на своем компьютере и так...

Считывание большого файла(~1гиг) - C++
нужно считать текст из большого файла по 1мб так, чтобы потом можно было потом обрабатывать строки(фильтровать). использовать функции...

Сортировка большого одномерного массива - C++
Вот что у меня получилось. Сортировка по возростанию массива со случайными элементами. Так работает нормально, но мне нужно чтобы массив...

Хеширование строк большого файла - C++
Здравствуйте! Помогите, пожалуйста разобраться с процессом хеширования. Задача состоит в том, что мне дан текстовый файл примерно в 100Мб...


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

Или воспользуйтесь поиском по форуму:
[progeR]
30 / 8 / 0
Регистрация: 20.08.2011
Сообщений: 605
21.08.2011, 00:24  [ТС]     Алгоритмы отображения большого текста на экране #15
Текст у меня в конце концов получается html, поэтому в Qt использую QWebView.
Быть может, все вот это можно сделать непосредственно через html/css.
Yandex
Объявления
21.08.2011, 00:24     Алгоритмы отображения большого текста на экране
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru