"Приоткрытие" изображений |
Здравствуйте, гость ( Вход | Регистрация )
"Приоткрытие" изображений |
Elfinit |
17.3.2009, 16:16
Сообщение
#1
|
Участник Группа: Участник Сообщений: 127 Регистрация: 17.3.2009 Из: Казань Пользователь №: 619 Спасибо сказали: 7 раз(а) Репутация: 1 |
Стандартный метод загрузки изображения - QImage::load. При достаточно большом изображении занимает довольно длительное время (ощутимое,по крайней мере).
Что заметил в существующих программах. Пикаса, к примеру (имею ввиду Picasa Photo Viewer). При перелистывании фоток если фотка объёмная, то изображение сначала показывается размытым, и через некоторое время заменяется чётким. При этом вроде как никаких кэшированных изображений нет (да если бы и были, на создание миникопии для кэша затрачивалось бы время,не оправданное задачей). Т.е. происходит открытие изображения сначала в плохом качестве, параллельно грузится "полноценная" фотка и заменяется при завершении загрузки. Какое-то "приоткрытие", если можно так сказать. Другой пример - режим "эскизы страниц" или "диафильм" в винде. Превьюшки опять-таки создаются практически моментально, независимот от того, насколько велика фотка. Вопрос такой - кто-нибудь что-нибудь знает о программной реализации этого в Qt? Возможно, что-то вроде асинхронного чтения изображений (beginLoad/endLoad какой-нибудь). Или всё-таки показывать сначала картинку плохого качества (будем считать, что она всё-таки есть), при этом запускать поток загрузку полноценной фотки и заменять плохую на полноценную? Выделять это действие в отдельный поток, по-моему, не совсем...Элегантно))) Как-то же это делают) |
|
|
Litkevich Yuriy |
17.3.2009, 16:26
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Elfinit |
17.3.2009, 16:34
Сообщение
#3
|
Участник Группа: Участник Сообщений: 127 Регистрация: 17.3.2009 Из: Казань Пользователь №: 619 Спасибо сказали: 7 раз(а) Репутация: 1 |
Т.е. например при перелистывании фоток на кажду фотку стартовать отдельный поток, или всегда держать один, который будет ждать запроса?
А что, если переход на следующую фотку будет запрошен раньше,чем загрузится текущая? А в режиме слайд-шоу как предусмотреть все варианты?)) Вообще, в целом не горит, просто жутко интересно, как это делается.. |
|
|
Litkevich Yuriy |
17.3.2009, 17:22
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
А что, если переход на следующую фотку будет запрошен раньше,чем загрузится текущая? в хорошей программе нужно предусматривать прерывание любых процессов, если какой-то процесс перестал быть нужен, его прерывать.А в режиме слайд-шоу как предусмотреть все варианты?)) слайдшоу - последовательный процесс. Вот условные обозначения:Тх-1 - время на один шаг в прошлое (предыдущий кадр/картинка) Тх - настоящее (текущий кадр) Тх+1 - время на шаг в будущее (следующий кадр) +d - положительная тенденция, т.е. изменение времени положительно (от прошлого к будущему) -d - отрицателная тенденция, т.е. изменение времени отрицательно (от будещего кпрошлому) тогда, загружать надо так: 1) если +d, то загружаем Тх, по завершении загрузки начать загрузку Тх+1, а Тх-2 (если таковой есть) удалить 2) если -d, то загружаем Тх, по завершении загрузки начать загрузку Тх-1, а Тх+2 (если таковой есть) удалить |
|
|
Текстовая версия | Сейчас: 26.12.2024, 14:07 |