Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Анимация 
:(
    Опции темы
Kirgston
Дата 12.3.2009, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Еххх.... кажется всё сделал... сделал очень хитро =) но тут беда... 

Вообщем код такой:

Код

void __fastcall TForm1::Image1MouseEnter(TObject *Sender)
{
TGIFImage *gif=new TGIFImage;
gif->Assign(Image1->Picture);
gif->Animate=true;
gif->AnimationSpeed=1000;
Image1->Picture->Assign(gif);
gif->Free();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image1MouseLeave(TObject *Sender)
{
TGIFImage *gif=new TGIFImage;
gif->Assign(Image1->Picture);
gif->Animate=false;
Image1->Picture->Assign(gif);
gif->Free();
}


Итак скажем результат должен быть простой. Я сначала гружу в Имаж1 картинку, затем если я наведу мышкой на картинку она должна как бы анимироваться... ну анимация идет только очень медленная (АнимейшенСпиид не помогает) ... после того как я отвожу курсор останавливается... но как навожу второй раз то... картинка и программа просто зависают... 
Такое впечатление что борланд просто "гробит" картинку... просто если грузить с файла то всё ок, если же с компонента то всё глючит...

Есть какие то идеи?  smile 
PM MAIL   Вверх
Anikmar
Дата 13.3.2009, 02:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Kirgston @  12.3.2009,  20:34 Найти цитируемый пост)
void __fastcall TForm1::Image1MouseEnter(TObject *Sender)
{
TGIFImage *gif=new TGIFImage;
gif->Assign(Image1->Picture);
gif->Animate=true;
gif->AnimationSpeed=1000;
Image1->Picture->Assign(gif);
gif->Free();
}

А необходимо при каждом событии мышки создавать/удалять картинку? Этих событий приходит десятки в секунду, может как-то вынести переменную в форму?
PM MAIL ICQ   Вверх
Kirgston
Дата 13.3.2009, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



А почему десятки в секунду? Это событие вызывается как только курсор "наехал" на картинку =) когда он "ходит" по картинке это событие не вызывается.
Ну... щас попробую в глобальную перенести =) . Пасибки =)

Добавлено через 9 минут и 5 секунд
Попробовал... ничего... как глючило так и глючит... 
PM MAIL   Вверх
Anikmar
Дата 13.3.2009, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Я вообще подход с перназначением картинки по мышке не понимаю.

Один раз настраиваем картинку, а по событию мышки включаем/выключаем анимацию.
Если нужно, чтобы без мышки картинка гасла - то можно сбрасывать свойство visible...
PM MAIL ICQ   Вверх
Kirgston
Дата 13.3.2009, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Ну подход простой =) когда мышка на рисунке он анимируется, как только мышка "уходит" с картинки, то анимация прекращается...

Так и надо как я написал. Просто я не понимаю почему изображение очень тормозит ... очень тормозит...
PM MAIL   Вверх
Anikmar
Дата 13.3.2009, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



и все-таки я бы попробовал по-другому:
Код

Этот бы участок я бы вынес куда-нибудь в OnShow
gif=new TGIFImage;
gif->Assign(Image1->Picture);

Этот в OnClose
gif->Free();

При вхождении мышки
gif->Animate=true;
gif->AnimationSpeed=1000;
Image1->Picture->Assign(gif); // Не уверен - может и не понадобится

При покидании мышки
gif->Animate=false;
Image1->Picture->Assign(gif); // Не уверен - может и не понадобится



PM MAIL ICQ   Вверх
Kirgston
Дата 14.3.2009, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Да дело не в этом =) код работает безупречно ;) но... как я и говорил скорость анимации никакая.... какую я бы не ставил... скорость как у черепахи... как только гружу из файла то скорость раз в 10 выше, но опять таки рывками...
PM MAIL   Вверх
Anikmar
Дата 14.3.2009, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Я сравнил:
1. Загрузка из файла в компонент TGifImage. Кол-во кадров 9
2. Загрузка этого же файла в TImage, и присваивание его с помощью метода Assign объекту TGifImage. Кол-во кадров 64.

В общем глючит TImage не по детски.
PM MAIL ICQ   Вверх
Kirgston
Дата 14.3.2009, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



На оборот =) если грузить из файла - 64, если с компонента - 9. 

Оказывается всё просто... когда в компонент идет вставка рисунка он записывает всё это в НЕХ код. Если записать туда Гиф... то он просто не умеет с ним работать... 
Вообщем попробуйте записать в TImage гиф рисунок. И потом сохранить его же... посмотрите на размер...
PM MAIL   Вверх
Anikmar
Дата 14.3.2009, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Kirgston @  14.3.2009,  12:58 Найти цитируемый пост)
На оборот =) если грузить из файла - 64, если с компонента - 9.

неа.
Напрямую из файла правильное количество кадров, а через TIMage - глюк.

ИМХО:
Инициировать gif из файла, а не через TImage. Это самый правильный на мой взгляд вариант: при статической загрузке рисунка он помещается в исполняемый код, а это приводит к увеличению размера модуля (ведь весь рисунок хранится в dfm, а при сборке проекта запихивается в exe.
Либо применять RxLib
Либо отрисовывать покадрово вручную (мой первый пример)

Но вариант с файлом - самый правильный. В конце концов можно и в ресурс запихать.
PM MAIL ICQ   Вверх
Anikmar
Дата 14.3.2009, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Kirgston, короче попробуйте еще такой вариант:
Запуск анимации
Код

    TGIFImage *Gif = dynamic_cast<TGIFImage *>(Image1->Picture->Graphic);
    Gif->AnimationSpeed = 10000;
    Gif->Animate = true;


У меня все хорошо отображается - значения Gif->AnimationSpeed - чем меньше тем медленнее (подбирайте экспериментально).

Убил бы разработчиков студии за такой хелп.
PM MAIL ICQ   Вверх
Kirgston
Дата 14.3.2009, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Неа... у меня ничего не меняется... вообще ничего... хе хе... ладно буду надеятся что в сл билдере будет лучше с поддержкой рисунков =)
PM MAIL   Вверх
Kirgston
Дата 14.3.2009, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



УЖАААААААААААААААААААААААС бреееееееееед как же оно работает с анимацией ..... ребята а что за штуковина такая... что ТИмадж делает как бы окантовку чёрными пискелями? Что это? Зачем? Есть ему замена ? Под Билдер 2009 ?  smile  
PM MAIL   Вверх
Anikmar
Дата 15.3.2009, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Странно, что мой вариант у вас не работает. Может свой gif мне скинете? Я меня отлично все работает. Возможно gif немного разный.
PM MAIL ICQ   Вверх
Kirgston
Дата 16.3.2009, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



Да пожалуйста =) 
У меня нормальное кол-во кадров только когда я считываю из файла... не знаю может быть вариант что это из-за системы... но это уж очень не правильный вариант =)

Как я ни пытался... все равно не смог сделать нормальное кол-во кадров если рисунок лежит в TImage ... темболее на некоторых рисунках идет обвод контуров о_О причем автоматический. Посмотрите файл "флаг" . Если через виндовский проигрыватель картинок то всё хорошо, когда через Билдера... очень криво... 


Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  gif.rar 83,77 Kb
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0933 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.