Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Как определить конец проигрывания gif

Ответить
Настройки темы
.NET - Как определить конец проигрывания gif

Старожил


Сообщения: 154
Благодарности: 39

Профиль | Отправить PM | Цитировать


Здравствуйте, есть форма, на которой обьект - PictureBox. И вот такой незамысловатый код. Вопрос в том - как определить конец проигрывания gif анимации, ну или заставить ее проигрывать покадрово командой, а не как по дефилту - автоматом по-кругу. Просто время засечь не катит ибо на разных машинах оно разное (вопрос производительности в конкретный момент)
Код: Выделить весь код
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public int local_time;
        Random rand;
        int last;
        public Form1()
        {
            InitializeComponent();
            local_time = 0;
            rand = new Random();
            choise.Start();
            this.SetDesktopLocation(System.Windows.Forms.Screen.PrimaryScreen.Bounds.Right - 109, System.Windows.Forms.Screen.PrimaryScreen.Bounds.Bottom - 121);
        }

        private void choise_Tick(object sender, EventArgs e)
        {
            int choises;
            do
            {
                choises = rand.Next(4, 11);
            }
            while (choises == last);
            if (choises == 10)
            {
                pictureBox1.Image = WindowsFormsApplication3.Properties.Resources._1_4_5sec;
                pos1.Start();
            }
            else
                if (choises == 9)
                {
                    pictureBox1.Image = WindowsFormsApplication3.Properties.Resources._2_3sec;
                    pos2.Start(); 
                }
                else
                {
                    pictureBox1.Image = WindowsFormsApplication3.Properties.Resources.stay_0_4sec;
                    pos3.Start();
                }
            last = choises;
            choise.Stop();
        }

        private void pos1_Tick(object sender, EventArgs e)
        {
            pos1.Stop();
            choise.Start();
        }

        private void pos2_Tick(object sender, EventArgs e)
        {
            pos2.Stop();
            choise.Start();
        }

        private void pos3_Tick(object sender, EventArgs e)
        {
            pos3.Stop();
            choise.Start();
        }

        private void picture_refresher_Tick(object sender, EventArgs e)
        {
            pictureBox1.Refresh();
        }
    }
}
в ресурсах - 3-и gif анимашки разной длительности.

Отправлено: 19:54, 13-01-2011

 

Аватара для yurfed

Ветеран


Сообщения: 20133
Благодарности: 3144

Профиль | Отправить PM | Цитировать


Beyound, конкретно код не дам, но очевидно, по счётчику фреймов в GIF файле.

-------
Хочу ли я - Могу ли я - Говно ли я - Магнолия


Отправлено: 20:37, 13-01-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 154
Благодарности: 39

Профиль | Отправить PM | Цитировать


в том то и вопрос - как его извлечь и picturebox или из picturebox.image или еще как???

Отправлено: 22:54, 13-01-2011 | #3


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


PictureBox скрывает всю рутинную работу по организации проигрывания анимации Gif файла. Вручную, для иллюстрации самого процесса, достаточно воспользоваться классом Image и таймером.
Пример на VB.NET
Код: Выделить весь код
Imports System
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Drawing.Imaging

Class GifPlayer
    Inherits Form
    Dim imFile As Image
    Dim iFrame As Single = 0
    Dim frameCount As Single
    Dim Dimension As FrameDimension
    Dim tmr As New Timer()
    Shared Sub Main()
        Application.Run(New GifPlayer())
    End Sub
    Sub New()
        imFile = Image.FromFile("My.gif")
        Dimension = New FrameDimension(imFile.FrameDimensionsList(0))
        frameCount = imFile.GetFrameCount(Dimension)

        AddHandler tmr.Tick, AddressOf TimerOnTick
        tmr.Interval = 100
        tmr.Enabled = True
    End Sub
    Private Sub TimerOnTick(ByVal obj As Object, ByVal ea As EventArgs)
        imFile.SelectActiveFrame(Dimension, iFrame)
        iFrame += 1
        Dim grfx As Graphics = CreateGraphics()
        grfx.DrawImage(imFile, Point.Empty)
        grfx.Dispose()
        If iFrame >= frameCount Then tmr.Enabled = False
    End Sub
End Class

Единственное, время анимации берётся не из Gif файла, а задаётся явно (100мс на каждый кадр в примере выше).
Собственно If iFrame >= frameCount и будет условием окончания проигрывания анимации.

Отправлено: 17:08, 16-01-2011 | #4


Старожил


Сообщения: 154
Благодарности: 39

Профиль | Отправить PM | Цитировать


спасиб большое.. попробую... с темой про разбиение на фреймы и выбор активфрейма я уже догадался.. а вот с тем как побороть стандартную прорисовку, которая начинает крутить фреймы по кругу заново чето недогадался попробовать класс graphics. как попробую отпишусь

Отправлено: 21:35, 16-01-2011 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Как определить конец проигрывания gif

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Экран замерцал как gif serj88rus Непонятные проблемы с Железом 0 01-12-2010 10:12
как заставить просмотрщик фотографий в Win-7 воспроизводить gif формат А_н_д_р_ей Хочу все знать 2 12-02-2010 20:55
Антивирусы - [решено] Как лечить этот вирус foto18.gif ? AACC Лечение систем от вредоносных программ 15 17-09-2009 08:37
[решено] Как сделать автопрокрутку в конец List-box? Twix1124 AutoIt 1 28-05-2009 23:55
как перевести avi(фрагмент) в gif малой емкости? illusionmgs Хочу все знать 5 16-10-2008 03:20




 
Переход