Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C++ Builder > Анимация |
Автор: Kirgston 6.3.2009, 22:12 |
Всем доброго времени суток! Ребята подскажите пожалуйста как можно анимировать картинку? Скажем когда я навожу на Имадж1 чтобы запускалась анимация, отвожу - выключалась. ![]() |
Автор: Anikmar 6.3.2009, 23:28 |
Я бы сделал так: Разместил бы на форме панель, на нее - TAnimate. Последняя невидима и неактивна. В панели отлавливаю мышь. Попала мышь на панель - включаю TAnimate. С выключением сложнее - надо ловить мышь на том контроле, которому панель принадлежит (потому, как панель TAnimate перекроет). Если бы TAnimate мышь ловила было бы немного проще - потеряла мышь - выключилась. Но это дело техники, на самом деле. Добавлено через 34 секунды Читаю эту фразу и смеюсь - во как жизнь несчастную мышь допекла ![]() |
Автор: Kirgston 6.3.2009, 23:44 | ||
Если по вашему принципу то ничего сложного ;) просто вы забыли о OnMouseEnter OnMouseLive . Вот и на этом можно построить... но дело в том что я хочу Gif =) . А Анимейт поддерживает только видео. Помню на делфи я делал так:
Вроде так... но дело в том что тут понадобится файл из вне =) а я хочу чтобы программа обошлась без всего этого =) |
Автор: Anikmar 6.3.2009, 23:52 |
Я не знаю, поддерживает ли 2009 Gif. Шестерка точно не поддерживала. Если есть компоненты для работы с Gif - то можно. Но меня терзают смутные сомнения, что Gif так и остался платным форматом (что-то такое слышал) и открывать лицензию не хотят. Из этого вытекают соответствующие проблемы. Перегнать Gif в AVI я вроде где-то видел какие-то конверторы. В общем не суть - если у вас получится на AVI - следующим ходом ищите Gif-компонент. Хотя, если честно, не получиться просто не может - реально 4 строки введенного вручную кода (не считая имен файлов проекта и компонентов). |
Автор: THandle 7.3.2009, 01:00 |
Kirgston, TImage поддерживает GIF. http://forum.vingrad.ru/forum/topic-215056/anchor-entry1706992/0.html |
Автор: Kirgston 7.3.2009, 01:20 |
Аааааа ребята =) я знаю =) Начиная с 2007 РАДа включена поддержка анимации и гифов (в РАД 2009 даже пнг есть) . Я просто не знаю как запустить анимацию :( подскажите пожалуйста... |
Автор: Anikmar 7.3.2009, 04:40 | ||||
Поделитесь, как? Компонент RxLib не в счет. Именно TImage? У меня ничего не получилось. Грузит успешно только первый кадр, анимацию не поддерживает. Единственный метод, с помощью которого я заставил TImage работать с gif выглядел примерно так: По нажатию кнопки запуска загружаю gif:
Считываю количество кадров, запускаю таймер. В обработчике таймера рисую кадр:
Метод идиотский, как и идиотский (в своем духе) хелп у борланда. Если TImage в Design-mode позволяет загрузить gif и честно пишет, что объект TGIFImage загружен, ну почему по нему нет ни строчки хелпа?! Сам класс определяется с ним можно работать - но изучай по прототипу и все тут. Уроды, одним словом. Тем не менее мой метод вижу дурацким. Слишком сильно мерцание. Резюме: TImage не рисует gif (нормально), и тем более не анимирует. ИМХО. Либо моего терпения на шастанье в потемках билдер-"хелпа" не хватило. RxLib наверное будет работать, но я ее не ставил и не проверял. ![]() Эх, соединить бы среду билдера с хелпом студии - цены не было бы продукту. (ИМХО) |
Автор: SVN74 7.3.2009, 12:20 | ||
Вот готовый (рабочий) примерчик для C++Builder 2009 =========================================
|
Автор: SVN74 7.3.2009, 13:10 |
Демонстрация двух разных способов вывода: Один выводит на Image... Другой на Memo1... (полезная вещь для смайлов) То бишь можно вообще не использовать Image... |
Автор: Kirgston 7.3.2009, 13:15 | ||
Аааааааа РЕБЯТА! Я же говорю всё намного проще! =) Кто то хоть смотрел на код что я привел? В Делфи? Просто синтаксис себе поменяйте.
=) всё намного проще =) Ребята только мне не надо лод фром файл. Мне надо чтобы он грузился с ехе... аля с ресурсов... помогите пожалуйста ![]() |
Автор: Kirgston 8.3.2009, 13:56 |
Ребята. Подскажите пожалуйста ))) как же мне всё это грузить из ресурсов? =) Заранее очень благодарен! |
Автор: THandle 8.3.2009, 14:02 |
Kirgston, что все? Картинки? Так ведь тем полно... Вот например: http://forum.vingrad.ru/forum/topic-243185/unread-1.html |
Автор: Dmi3ev 8.3.2009, 14:17 | ||
http://forum.vingrad.ru/forum/topic-249463.html |
Автор: Kirgston 9.3.2009, 11:00 |
Ой тьфу... закрутился со всем этим и ... вообщем извините ![]() |
Автор: Kirgston 12.3.2009, 20:34 | ||
Еххх.... кажется всё сделал... сделал очень хитро =) но тут беда... Вообщем код такой:
Итак скажем результат должен быть простой. Я сначала гружу в Имаж1 картинку, затем если я наведу мышкой на картинку она должна как бы анимироваться... ну анимация идет только очень медленная (АнимейшенСпиид не помогает) ... после того как я отвожу курсор останавливается... но как навожу второй раз то... картинка и программа просто зависают... Такое впечатление что борланд просто "гробит" картинку... просто если грузить с файла то всё ок, если же с компонента то всё глючит... Есть какие то идеи? ![]() |
Автор: Anikmar 13.3.2009, 02:54 | ||
А необходимо при каждом событии мышки создавать/удалять картинку? Этих событий приходит десятки в секунду, может как-то вынести переменную в форму? |
Автор: Kirgston 13.3.2009, 10:39 |
А почему десятки в секунду? Это событие вызывается как только курсор "наехал" на картинку =) когда он "ходит" по картинке это событие не вызывается. Ну... щас попробую в глобальную перенести =) . Пасибки =) Добавлено через 9 минут и 5 секунд Попробовал... ничего... как глючило так и глючит... |
Автор: Anikmar 13.3.2009, 12:21 |
Я вообще подход с перназначением картинки по мышке не понимаю. Один раз настраиваем картинку, а по событию мышки включаем/выключаем анимацию. Если нужно, чтобы без мышки картинка гасла - то можно сбрасывать свойство visible... |
Автор: Kirgston 13.3.2009, 21:24 |
Ну подход простой =) когда мышка на рисунке он анимируется, как только мышка "уходит" с картинки, то анимация прекращается... Так и надо как я написал. Просто я не понимаю почему изображение очень тормозит ... очень тормозит... |
Автор: Anikmar 13.3.2009, 21:37 | ||
и все-таки я бы попробовал по-другому:
|
Автор: Kirgston 14.3.2009, 00:01 |
Да дело не в этом =) код работает безупречно ;) но... как я и говорил скорость анимации никакая.... какую я бы не ставил... скорость как у черепахи... как только гружу из файла то скорость раз в 10 выше, но опять таки рывками... |
Автор: Anikmar 14.3.2009, 02:12 |
Я сравнил: 1. Загрузка из файла в компонент TGifImage. Кол-во кадров 9 2. Загрузка этого же файла в TImage, и присваивание его с помощью метода Assign объекту TGifImage. Кол-во кадров 64. В общем глючит TImage не по детски. |
Автор: Kirgston 14.3.2009, 12:58 |
На оборот =) если грузить из файла - 64, если с компонента - 9. Оказывается всё просто... когда в компонент идет вставка рисунка он записывает всё это в НЕХ код. Если записать туда Гиф... то он просто не умеет с ним работать... Вообщем попробуйте записать в TImage гиф рисунок. И потом сохранить его же... посмотрите на размер... |
Автор: Anikmar 14.3.2009, 13:05 |
неа. Напрямую из файла правильное количество кадров, а через TIMage - глюк. ИМХО: Инициировать gif из файла, а не через TImage. Это самый правильный на мой взгляд вариант: при статической загрузке рисунка он помещается в исполняемый код, а это приводит к увеличению размера модуля (ведь весь рисунок хранится в dfm, а при сборке проекта запихивается в exe. Либо применять RxLib Либо отрисовывать покадрово вручную (мой первый пример) Но вариант с файлом - самый правильный. В конце концов можно и в ресурс запихать. |
Автор: Anikmar 14.3.2009, 13:45 | ||
Kirgston, короче попробуйте еще такой вариант: Запуск анимации
У меня все хорошо отображается - значения Gif->AnimationSpeed - чем меньше тем медленнее (подбирайте экспериментально). Убил бы разработчиков студии за такой хелп. |
Автор: Kirgston 14.3.2009, 17:26 |
Неа... у меня ничего не меняется... вообще ничего... хе хе... ладно буду надеятся что в сл билдере будет лучше с поддержкой рисунков =) |
Автор: Kirgston 14.3.2009, 18:56 |
УЖАААААААААААААААААААААААС бреееееееееед как же оно работает с анимацией ..... ребята а что за штуковина такая... что ТИмадж делает как бы окантовку чёрными пискелями? Что это? Зачем? Есть ему замена ? Под Билдер 2009 ? ![]() |
Автор: Anikmar 15.3.2009, 20:32 |
Странно, что мой вариант у вас не работает. Может свой gif мне скинете? Я меня отлично все работает. Возможно gif немного разный. |
Автор: Kirgston 16.3.2009, 11:54 |
Да пожалуйста =) У меня нормальное кол-во кадров только когда я считываю из файла... не знаю может быть вариант что это из-за системы... но это уж очень не правильный вариант =) Как я ни пытался... все равно не смог сделать нормальное кол-во кадров если рисунок лежит в TImage ... темболее на некоторых рисунках идет обвод контуров о_О причем автоматический. Посмотрите файл "флаг" . Если через виндовский проигрыватель картинок то всё хорошо, когда через Билдера... очень криво... |
Автор: Anikmar 16.3.2009, 13:49 |
У меня все прекрасно работает. Посмотрите: |
Автор: Kirgston 16.3.2009, 23:57 |
Ой ... извините я даже просто не так обрабатывал =) вообщем лучшая скорость "-1" =) как я понимаю Билдер сам делает оптимальную скорость, либо ставит максимальную... В общем... огромное вам спасибо! А чёрные кубики у меня из-за того выставлен Stratch=true . Надо просто "подгонять" анимацию под размеры TImage . |
Автор: Anikmar 17.3.2009, 00:05 | ||
Ну слава Богу, а то я уж нечистую силу стал подозревать. -1 я поставил методом тыка, я так понял это скорость по умолчанию, которая задана в самом гифе. Но заставить картинку двигаться очень быстро у меня не получилось. Резюмируя данный вопрос - я бы отметил, что в 2009 хелп мне понравился еще меньше чем в шестерке. Конечно информации больше, онлайн доступ к msdn и т. п. Но скорость работы как самого хелпа так и скорость получения нужной информации хромает бессовестно. Также бесит напрочь отсутсвие хоть какого-то хелпа на работающие классы - типа того же гифа. |