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

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

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

Студворк — интернет-сервис помощи студентам
Собственно в теме все указано. Не подскажете как это реализовать? Хочу сделать красивый анимированный интерфейс на основе 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
1 / 1 / 1
Регистрация: 23.05.2009
Сообщений: 52
05.01.2016, 20:54
Студворк — интернет-сервис помощи студентам
А как проиграть gif в picturebox однократно и при этом проверить закончилась анимация или нет?
допустим при нажатии на button1 в picturebox1 грузиться gif и проигрывается и как только анимация заканчивается то выгрузить gif из picturebox.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4372 / 3442 / 512
Регистрация: 27.01.2014
Сообщений: 6,266
21.01.2016, 16:41  [ТС]
reyn90, посмотрите проект и что не понятно, спрашиваейте приводя код.
0
1 / 1 / 1
Регистрация: 23.05.2009
Сообщений: 52
23.01.2016, 19:35
Цитата Сообщение от Yury Komar Посмотреть сообщение
reyn90, посмотрите проект и что не понятно, спрашиваейте приводя код.
какой код? я не знаю как это реализовать! если бы знал хоть как примерно это сделать то наброски бы скинул. а так вообще не знаю реально это или нет. гугл меня не понял.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4372 / 3442 / 512
Регистрация: 27.01.2014
Сообщений: 6,266
23.01.2016, 19:56  [ТС]
reyn90, вполне реально. Но сейчас уже не у компа. Так что только завтра. А так, все это есть моем примере, и остановка и проигрывание в обратном понядке при наведении на кнопку и убирая курсор с кнопки. При том что при наведении анимация проигрывается до конца и останавливается... но файл сам циклический и должен анимириваться бесконечно
0
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 334
09.11.2016, 20:23
Возможно ли как-нибудь узнать какой кадр гифки проигрывается в текущий момент времени на picturebox?
сама gifка загружена в picturebox.image
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
09.11.2016, 21:20
Посмотрите Сделать стопкадр в Gif-анимации
0
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 334
09.11.2016, 22:13
Цитата Сообщение от ovva Посмотреть сообщение
Посмотрите Сделать стопкадр в Gif-анимации
К сожалению на сколько я понял там нет возможности узнать какой номер кадра в данный момент отрисован на picturebox -
да можно сделать полностью программно зависимую анимацию, но это не точно мне надо.
а хотелось бы чтобы анимация работала независимо, и в определенные события проверять какой кадр и если последний то удалить анимационную картинку.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4372 / 3442 / 512
Регистрация: 27.01.2014
Сообщений: 6,266
12.11.2016, 19:10  [ТС]
Fakels, боюсь, что стандарнтый PictureBox вам этого не даст. Придеться делать свой, в котором и будет ПРОГРАММНО играться ваша анимашка, а отсюда можно и все ее данные вытащить, включая номер кадра, что наверное самое простое из того, что можно будет сделать
0
1550 / 1527 / 325
Регистрация: 03.10.2012
Сообщений: 1,558
12.11.2016, 20:32
Цитата Сообщение от Yury Komar Посмотреть сообщение
стандарнтый PictureBox вам этого не даст. Придеться делать свой
Почему обязательно PictureBox, Yury Komar, ваша идея, я припоминаю, позволяет играть анимашку на чем угодно,
а не на таком тяжеловесном контроле, как PictureBox.
1
Модератор
Эксперт .NET
 Аватар для Yury Komar
4372 / 3442 / 512
Регистрация: 27.01.2014
Сообщений: 6,266
13.11.2016, 00:25  [ТС]
MrCrown, все верно, где угодно. Я просто пытаюсь обыграть имено текущую тему, в которой упомянается именно PictureBox.
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
15.11.2016, 22:28
М.б. кому то будет полезно. Пример класса для работы с gif-анимацией (VS2010, NET4.0).
Миниатюры
Play, Stop, Pause, Resume, Reverse для Gif анимации на кнопке или в других объектах  
Вложения
Тип файла: rar aniGif_Demo.rar (1.03 Мб, 23 просмотров)
2
Модератор
Эксперт .NET
 Аватар для Yury Komar
4372 / 3442 / 512
Регистрация: 27.01.2014
Сообщений: 6,266
16.11.2016, 00:02  [ТС]
ovva, спасибо, посмотрю на досуге... выглядит красиво

Добавлено через 3 минуты
ovva, кодтне смотрел, но догадываюсь, реализован класс не на основе таймеров, а с использованием класса ImageAnimate, если не ошибся с названием? Думаю его надо в ГОТОВЫЕ РЕШЕНИЯ поместить, если все хорошо работает.

Добавлено через 18 минут
Посмотрел класс - оч.неплохо, тока есть неудобная штука - кадр рисуется всегда в позиции (0,0), может все же играть анимацию в свойствах Image или BackgroundImage, расположение картинки которых настроено пользователем в редакторе свойств например? Ну а выбор того, в каком свойстве крутить анимашку - задавать при создании экземпляра класса? А то например мне вот часто хочется анимировать имено ЭУ (кнопки, лэйблы и так далее)... Думаю замысл понятно объяснил



Добавлено через 5 минут
ну либо добавить еще свойство "FramePosition", и снабдить его теми вариантами, которые есть в стандартных перечисления?
Stretch, Zoom, Center, Autosize, None (+добавить (DockTop,DockRight,DockBottom,DockLeft)) ... Тогда уж точно будет КРУТО.
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
16.11.2016, 00:23
Думаю, что особых проблем с этим нет, просто в pBox_Paint вместо
VB.NET
1
e.Graphics.DrawImage(aniImage, New Point(0, 0))
поставить
VB.NET
1
e.Graphics.DrawImage(aniImage, New Point(x, y))
предварительно вычисляя x и y в зависимости от ситуации.
М.б. завтра удастся дописать.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4372 / 3442 / 512
Регистрация: 27.01.2014
Сообщений: 6,266
16.11.2016, 01:26  [ТС]
ovva, эт понятно, просто как дополнение решил подинуть идейку

Добавлено через 21 минуту
сейчас порылся в исходном коде стандартного PB, там проигрывание анимации тоже идет через ImageAnimator...
И походу дела возник вопрос в скорости проигрывания - она медленнее чем оригинал, тоесть открыв гифку в IE мы увидим реальную задержку между кадрами, а открыв ее же в нашем приложении загружая в PB - скорость заметно падает и картинка анимируется как-то с тормозами. с чем это связано?
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
16.11.2016, 19:40
1. В AniGIFmaster добавил FramePosition
2. По скорости
"Время, в течение которого данная картинка остается на экране. Минимальное значение - 1/100 секунды, максимальное - примерно 655 секунд. Таймер начинает отсчет лишь после того, как картинка выведена на экран, поэтому у разных программ просмотра время задержки может существенно различаться. Например, если попытаться сделать анимированный GIF - часы, то они могут, в зависимости от браузера, за минуту спешить или отставать более чем на секунду. "(http://home.onego.ru/~chiezo/gif.htm)
М.б. имеет смысл подстраивать скорость через PropertyTagFrameDelay (правда у меня пока с этим ничего не получается).
Вложения
Тип файла: rar aniGif_Demo.rar (13.5 Кб, 1 просмотров)
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
16.11.2016, 21:08
Пример с определением/изменением времени задержки, в сотых долях секунды, между двумя кадрами
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Imports System.Drawing.Imaging
Public Class Form3
    Private frameDelay As Integer()
    Private frameCount As Integer
    Private gifName As String
    Private img As Bitmap
    Private Sub Form3_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        gifName = "teodolit.gif"
        img = New Bitmap(gifName)
    End Sub
    'определяем время задержки, в сотых долях секунды, между двумя кадрами
    Public Function getFramesDelay(ByVal img As Bitmap) As Integer()
        Dim fd As New FrameDimension(img.FrameDimensionsList(0))
        frameCount = img.GetFrameCount(fd)
        Dim frameDelay = New Integer(frameCount - 1) {}
        Dim frameDelayItem As PropertyItem = img.GetPropertyItem(20736)
        If frameDelayItem IsNot Nothing Then
            Dim values As Byte() = frameDelayItem.Value
            For i As Integer = 0 To frameCount - 1
                frameDelay(i) = values(i * 4) + 256 * values(i * 4 + 1) + 256 * 256 * values(i * 4 + 2) + 256 * 256 * 256 * values(i * 4 + 3)
            Next
        Else
            frameDelay = New Integer(frameCount - 1) {}
        End If
        Return frameDelay
    End Function
    'изменяем время задержки, в сотых долях секунды, между двумя кадрами
    Public Sub setFramesDelay(ByRef img As Bitmap, ByVal ms0 As Byte, ByVal ms1 As Byte, ByVal ms2 As Byte, ByVal ms3 As Byte)
        Dim fd As New FrameDimension(img.FrameDimensionsList(0))
        frameCount = img.GetFrameCount(fd)
        Dim frameDelayItem As PropertyItem = img.GetPropertyItem(20736)
        If frameDelayItem IsNot Nothing Then
            Dim values As Byte() = frameDelayItem.Value
            For i As Integer = 0 To frameCount - 1
                values(i * 4) = ms0
                values(i * 4 + 1) = ms1
                values(i * 4 + 2) = ms2
                values(i * 4 + 3) = ms3
            Next
            frameDelayItem.Value = values
            img.SetPropertyItem(frameDelayItem)
        End If
    End Sub
    Private Sub getDelay_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim dd() As Integer = getFramesDelay(img)
        Dim str() As String = dd.[Select](Function(x) x.ToString()).ToArray()
        ListBox1.Items.Clear()
        ListBox1.Items.AddRange(str)
        PictureBox1.Image = img.Clone
    End Sub
    Private Sub setDelay_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
        Dim m0 As Byte = CByte(TextBox1.Text)
        Dim m1 As Byte = CByte(TextBox2.Text)
        Dim m2 As Byte = CByte(TextBox3.Text)
        Dim m3 As Byte = CByte(TextBox4.Text)
        img = New Bitmap(gifName)
        setFramesDelay(img, m0, m1, m2, m3)
        PictureBox1.Image = img.Clone
    End Sub
End Class
Миниатюры
Play, Stop, Pause, Resume, Reverse для Gif анимации на кнопке или в других объектах  
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4372 / 3442 / 512
Регистрация: 27.01.2014
Сообщений: 6,266
16.11.2016, 22:29  [ТС]
а теперь можно это так же добавить и прикрутить к вашему классу? Очень круто получается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.11.2016, 22:29

Как сделать так чтобы в процедурах понимался этот массив- (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...


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru