Название: [Решено] Рисование в фоновом слое QGraphicsScene Отправлено: surendil от Июня 29, 2011, 17:28 Привет всем!
С графикой никогда не работал, а тут вот пришлось... Я поделюсь своими соображениями, а вы скажите, на правильном ли я пути, ок? ;) Задача такая: нужно в фоне QGraphicsScene менять картинки с эффектом перехода "часовая стрелка" -- это когда старая картинка замещается новой по движению стрелки. Для этого я организую два QImage: в первом будет хранится текущая картинка (назовём её Front), во втором (Back) -- следующая. Также будет таймер, по которому фрагменты из Back будут перерисовываться Front. Вообще, будет перерисовываться вся картинка (QPainter::drawImage), но будет QPainter::setClipRegion(QRegion(QPolygon(...))). Потом в наследнике от сцены будет переопределена drawBackground, в котором будут перерисовываться куски Front. Название: Re: Рисование в фоновом слое QGraphicsScene Отправлено: Igors от Июня 29, 2011, 18:04 Ну здесь самое интересное как сделать переход "часовая стрелка" и особенно - антиалиас в месте перехода :)
Название: Re: Рисование в фоновом слое QGraphicsScene Отправлено: surendil от Июня 29, 2011, 18:38 Эмм.. полагаю, часовая стрелка -- это просто вращающийся сектор. Есть два угла, фиксированная длинна -- две полярные точки, только в прямоугольные координаты преобразовать -- и крути в своё удовольствие. Получившаяся "стрелка" определяет многоугольник, из которого делается clipRegion, а потом -- перерисовать из одного Image в другой.
Должно сработать наверное ) Да, ещё одно. Антиалиаса не надо, это не существенно Оо Название: Re: Рисование в фоновом слое QGraphicsScene Отправлено: Igors от Июня 29, 2011, 19:09 Эмм.. полагаю, часовая стрелка -- это просто вращающийся сектор. Есть два угла, фиксированная длинна -- две полярные точки, только в прямоугольные координаты преобразовать -- и крути в своё удовольствие. Получившаяся "стрелка" определяет многоугольник, из которого делается clipRegion, а потом -- перерисовать из одного Image в другой. Не вижу как здесь задействовать clip - больше мороки будет, да и в общем случае переход между 2-мя картинками требует полной перерисовки. А "полярные точки", "многоугольники", "clipRegion", "белка-стрелка" и.т.п. - все это здесь ни при чем, просто нужно- работать с буферами имеджей напрямую - ф-ция atan2 (math.h) Без AA это все Название: Re: Рисование в фоновом слое QGraphicsScene Отправлено: surendil от Июня 29, 2011, 19:17 - работать с буферами имеджей напрямую - ф-ция atan2 (math.h) Поясните пожалуйста. Название: Re: Рисование в фоновом слое QGraphicsScene Отправлено: Igors от Июня 29, 2011, 20:24 Пишу прямо здесь, если что отрихтуете
Код
Название: Re: Рисование в фоновом слое QGraphicsScene Отправлено: Авварон от Июня 29, 2011, 20:29 а QTransform нынче не в моде?
Название: Re: Рисование в фоновом слое QGraphicsScene Отправлено: ufna от Июня 29, 2011, 20:34 а QTransform нынче не в моде? ну что вы! так же не интересно ) Название: Re: Рисование в фоновом слое QGraphicsScene Отправлено: Igors от Июня 29, 2011, 20:40 А до чого тут QTransform если поворачивать нечего? Та и сделан тот QTransform через одно место.
Edit: а вот наверное "раскрутка по спирали" смотрелась бы поживее, интереснее. Ну там неск. строк добавить - разберется Название: Re: Рисование в фоновом слое QGraphicsScene Отправлено: surendil от Июня 29, 2011, 21:06 Igors, я почти догнал что в вашем коде.. эх, надо было геометрию учить :D
Раскрутка по спирали здорово, подумаю :) Название: Re: Рисование в фоновом слое QGraphicsScene Отправлено: Igors от Июня 29, 2011, 22:18 эх, надо было геометрию учить :D Да нормально Вы ее учили - просто не было "практики", и знания не применялисьРаскрутка по спирали здорово, подумаю :) Там несложно, если хотите объясню "на пальцах"Название: Re: Рисование в фоновом слое QGraphicsScene Отправлено: Авварон от Июня 29, 2011, 22:43 Igors
кстати бигэндиан процессор над вами смеется:) Название: Re: Рисование в фоновом слое QGraphicsScene Отправлено: Igors от Июня 30, 2011, 13:05 Igors Пока я отработал на big endian больше чем на little, только на PPC от его рождения до самой кончины :) При присваивании одного (q)uint другому никаких дополнительных/неявных преобразований выполняться не будет, "источник" копируется в "приемник" как есть - на любом endian. кстати бигэндиан процессор над вами смеется:) Название: Re: Рисование в фоновом слое QGraphicsScene Отправлено: surendil от Июля 04, 2011, 17:17 Код
Спасибо вам за помощь! :D |