Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/35: Рейтинг темы: голосов - 35, средняя оценка - 4.80
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197

Play, Stop, Pause, Resume, Reverse для Gif анимации на кнопке или в других объектах

11.01.2015, 03:00. Показов 6771. Ответов 36
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Собственно в теме все указано. Не подскажете как это реализовать? Хочу сделать красивый анимированный интерфейс на основе Gif анимации.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.01.2015, 03:00
Ответы с готовыми решениями:

Имитация нажатий медиаклавиш Play Pause Stop и тд
Приветствую всех. Не могу реализовать имитацию нажатия VK_VOLUME_MUTE VK_VOLUME_DOWN VK_VOLUME_UP VK_MEDIA_NEXT_TRACK ...

Медиаплеер - не работают кнопки Stop, Play и Pause
Помогите пожалуйста с медиаплеером. Не работают кнопки Stop, Play и Pause, вернее они работают (меседжбоксы срабатывают), но видео не...

GIF Stop and Play
Как можно остановить и влючить проигрывание анимации. И нужно чтобы анимация останавливалась на первом кадре. Хочу сделать гирлянду на...

36
 Аватар для Nachrichter
649 / 601 / 92
Регистрация: 19.03.2012
Сообщений: 1,128
11.01.2015, 09:26
Yury Komar, "воспроизвести" кадры .gif в таймере не вариант?
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
11.01.2015, 10:09  [ТС]
Nachrichter, так это мне и интересно. Нужно в любой нужный мне момент начать воспроизвеление. Остановить. Продолжить с места остановки. И неплохо еще иметт возможность их проиграть в обратном порядке. То что это крутить в таймере - само собой...
но как это делать?
очень буду признателее ща помощь.

Добавлено через 2 минуты
Например есть гифка для кнопки с изображением книжки. На нее наводишь она открывается и останавливается. Отводишь - в обратном порядке закрывается и в таком духе.
0
 Аватар для Nachrichter
649 / 601 / 92
Регистрация: 19.03.2012
Сообщений: 1,128
11.01.2015, 10:36
Лучший ответ Сообщение было отмечено Yury Komar как решение

Решение

Yury Komar, вот, как-то делал воспроизведение .gif в PictureBox'e:
VB.NET Скопировано
1
2
3
4
Imports System.Drawing.Imaging
 
Dim gifImage As Image = Image.FromFile("C:\1.gif")
Dim Index As Integer = 0
в таймер:
VB.NET Скопировано
1
2
3
4
5
6
gifImage.SelectActiveFrame(New FrameDimension(gifImage.FrameDimensionsList(0)), Index)
picturebox1.Image = gifImage
Index = Index + 1
If Index = gifImage.GetFrameCount(New FrameDimension(gifImage.FrameDimensionsList(0))) Then
   Index = 0
End If
может, получится под Ваши задачи доработать.
2
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
11.01.2015, 10:55  [ТС]
Nachrichter, оу. Спасибо огромное.самое тут главнре это возможность вытянуть конретный фрэйм. Думаю то что надо.
еще раз спасибо. Варучили

Добавлено через 3 минуты
Nachrichter, так как кол во фрэймов мне известно и места остановок тоже. То этот пример будет в самый раз по мне...
но было б не плохо еще уметь управлять уже загпуженным изображением. Хотя наверное это решаемо загпузкой в пепеменную gifImage не файла а изоьрадение с кнопки иои формы?
0
 Аватар для Nachrichter
649 / 601 / 92
Регистрация: 19.03.2012
Сообщений: 1,128
11.01.2015, 11:07
Цитата Сообщение от Yury Komar Посмотреть сообщение
это решаемо загрузкой в переменную gifImage не файла а изображения с кнопки или формы
Надо пробовать.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
11.01.2015, 13:22  [ТС]
Nachrichter, ок. Отпишусь потом. Но в теории должно.
0
Почетный модератор
 Аватар для Памирыч
23246 / 9158 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
11.01.2015, 13:48
Имхо, картинка будет анимироваться и без таймера.
VB.NET Скопировано
1
picturebox1.Image = gifImage
Тут мы просто посылаем гиф в PictureBox.
1
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
11.01.2015, 18:52  [ТС]
Памирыч, тут важна еще остановка проигрывания в нужный момент. Проигрывание в обратном порядке. Сброс, пауза и тд.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
11.01.2015, 18:56  [ТС]
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Nachrichter, Памирыч, получилось...
еще раз спасибо Nachrichter за наводку...
готовый проект прилепил в пост.
P.S. мне было еще очень важно чтобы анимация не проигрывалась самопроизвольно. Контроль нужен был, для этого использую свойство BackgroundImage, оно не воспроизводит GIF.
Вложения
Тип файла: zip Плеер GIF Анимации.zip (163.9 Кб, 341 просмотров)
5
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
11.01.2015, 19:03  [ТС]
Памирыч, у пикчура я нашел баг небольшой... если в негоивтавлена Гифка, все вроде шевелится. Но стоит вашей форме уйти на задний план, плюс стороннее окно развернуть на весь экран - анимация останавливается и не продолжается, пока программно в пукчур бокс не перегрущишь файл заново... а мой вариант решает эту проблему, так как имеется контроль показа фрэймов анимации по его порялковому номеру.
0
 Аватар для Nachrichter
649 / 601 / 92
Регистрация: 19.03.2012
Сообщений: 1,128
11.01.2015, 20:43
Yury Komar, отлично получилось! Надо бы в раздел исходников этот проект добавить.
1
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
11.01.2015, 20:59  [ТС]
Nachrichter, спасибо, но рано. Я его чуть доработаю потом. Хотя что там дорабатывать... добавить бегунок выбора нужного фрэйма, да отдельную кнопочку для выбора направления проигрывания "вперед/назад" чтоб понятнее был код... хотя, думаю этого достаточно и так
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
12.01.2015, 18:58
Эх.. Вот если бы из самой гифки интервалы между кадрами брать... Тем более, они разные могут быть.
0
1544 / 1507 / 324
Регистрация: 03.10.2012
Сообщений: 1,542
13.01.2015, 00:36
Цитата Сообщение от Qwertiy Посмотреть сообщение
самой гифки интервалы между кадрами брать
Средствами VB NET в метаданных гифки определяется два свойства под номерами 20736 и 20737. Но они закодированы в виде массивов байтов. Возможно, это и есть интервалы и количество фреймов. Как их правильно декодировать, думаю, надо смотреть спецификации по GIF.
Как получить метаданные.
0
 Аватар для Юпатов Дмитрий
1719 / 1206 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
13.01.2015, 19:25
Цитата Сообщение от MrCrown Посмотреть сообщение
два свойства под номерами 20736 и 20737. Но они закодированы в виде массивов байтов. Возможно, это и есть интервалы и количество фреймов. Как их правильно декодировать, думаю, надо смотреть спецификации по GIF.
Можно попробовать определить, что это такое:
http://msdn.microsoft.com/ru-r... .110).aspx
http://msdn.microsoft.com/ru-r... 34416.aspx - вот тут по поиску на странице "GIF" получим 5 свойств, начиная с PropertyTagFrameDelay ... короче, что-то похожее, т.к. связано и с временем.

Не может быть так, что эти метаданные к каждому кадру имеются, а не к анимации в целом?
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
13.01.2015, 23:45
Цитата Сообщение от Юпатов Дмитрий Посмотреть сообщение
Не может быть так, что эти метаданные к каждому кадру имеются, а не к анимации в целом?
Скорее всего так. Я помню, что в gimp'е для анимированных гифок задержка писалась в скобках у имён слоёв. Т. е. задержка может быть разной для разных кадров.
0
 Аватар для Юпатов Дмитрий
1719 / 1206 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
14.01.2015, 09:11
Цитата Сообщение от Qwertiy Посмотреть сообщение
задержка может быть разной для разных кадров
ну это да. Проверил в ArtCursors - там можно время для каждого слайда назначить индивидуально.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
15.01.2015, 19:45  [ТС]
Вобщем ответ на свой вопрос я нашел и реализовал. Финальный пример во вложении. В нем именно то что я хотел сделать в своей программе. А именно при наводе мышкой на кнопку или другй элемент с картинкой, красиво и плавно проигрывалась какая то анимация, например раскрытие книжки или открытие крышки у корзины(кнопка удаления) затем при отводе мышки с нее, так же красиво и плавно закрывалась в обратном порядке... конечно можно было сделать два изображения и вызывать их соответственно, но а если книга еще не успела раскрыться и вы вдруг мышку убрали. Она б резко появлялась уже открытой и начала закрываться.
вобщем в примере все понятно. Плюс подумал что можно использовать GIF файл как контейнер для изображений, с возможность менять интерфейс, выбрав нужный, заранее скомпонованный файл, при том что размеры фрэймов могут быть разными...

Добавлено через 48 секунд
Юпатов Дмитрий, мне кажется что всетаки какое то свойство за задержку отвечает

Добавлено через 27 минут
Блин. Косяк. Не получает прикрепить файл ((
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
15.01.2015, 21:47  [ТС]
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Урааа. Свершилось чудо. Я его прикрепил )))
Вложения
Тип файла: zip Готовое решение моего вопроса!.zip (467.6 Кб, 304 просмотров)
5
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.01.2015, 21:47
Помогаю со студенческими работами здесь

Как сделать так чтобы в процедурах понимался этот массив- (s: Array[0.2] of string = ('Play','Stop','Pause');)
Вот даны процедуры: procedure TVideoRecorder.play; begin if (v_power = True) and (v_title = 'Фильм поставлен') then begin ...

Task. Resume & Pause
Кто нибудь сталкивался? имеется ли в процессе, пауза и resume ? если да то как можно их сделать. new Task(new Action(() => {...

Не работает pause и resume в плеере
package display; import java.awt.EventQueue; import javax.swing.JFileChooser; import java.io.FileInputStream; import...

Jlayer library. Pause and Resume
Здравствуйте! Вопрос к тем, кто работал с библиотекой JLayer! В общем, с горем пополам я сделал паузу в плеере, а вот с продолжением...

Pause и Resume в Parallel.Foreach
Сделал пробный проект, в котором идет просто вывод переменной из List<int>. При нажатии на кнопку Button2 переменной isPaused...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. ) В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер