Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отображение анмимрованного GIF, C# WinForm 
:(
    Опции темы
Mutronics
Дата 21.7.2007, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Люди подскажите как отобразить анимированный GIF?
Пробовал нижеуказанный код, но ничего невышло и никак немогу понять OnNextFrame это событие какогото контрола или нет.
Код

    private void button1_Click(object sender, System.EventArgs e)
    {
      ImageAnimator.Animate(gif, new EventHandler(OnNextFrame));
    }

    private void OnNextFrame(object o, EventArgs e) 
    {
      Invalidate();
    }

    private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
      try
      {
        ImageAnimator.UpdateFrames();
        e.Graphics.DrawImage(gif, new Point(this.ClientSize.Width-130, 10));    
      }
      catch
      {
      }
    }

PM MAIL   Вверх
mr.DUDA
Дата 21.7.2007, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Рабочий пример:
Код
using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        Bitmap gifImage = new Bitmap(@"c:\test.gif");

        public Form1()
        {
            InitializeComponent();

            // при загрузке формы стартуем анимацию, передаём делегат на метод-обработчик изменения кадра
            ImageAnimator.Animate(gifImage, new EventHandler(this.OnFrameChanged));
        }

        private void OnFrameChanged(object o, EventArgs e)
        {
            // как только кадр изменился, перерисовываем форму
            Invalidate();
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            // обновление состояния Bitmap-а
            ImageAnimator.UpdateFrames();

            // отрисовка
            e.Graphics.DrawImage(gifImage, new Point(0, 0));
        }
    }
}



--------------------
user posted image
PM MAIL WWW   Вверх
Mutronics
Дата 21.7.2007, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Что-то никак не анимируется я так понел OnPaint нужно привязывать к событию формы Paint, а OnFrameChanged не к чему не привязывать
PM MAIL   Вверх
mr.DUDA
Дата 21.7.2007, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



OnPaint - не обработчик события, а перекрытый метод класса формы. OnFrameChanged вызывается ImageAnimator-ом. Код рабочий и гиф анимируется, вот весь проект вместе с тестовым гифом:


Присоединённый файл ( Кол-во скачиваний: 18 )
Присоединённый файл  WindowsApplication1.zip 9,62 Kb


--------------------
user posted image
PM MAIL WWW   Вверх
Mutronics
Дата 21.7.2007, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



mr.DUDA, Спасибо разобрался, просто я немного протупил, а ты не вкурсе как сделать через цикл
Код

for(int i = 0; i < 10; i++)
{
gif = new Bitmap(@"\" + i + ".gif");
}

что-то типа такого, чтобы они появлялись height =+ 20

PM MAIL   Вверх
mr.DUDA
Дата 21.7.2007, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Код
    public partial class Form1 : Form
    {
        const int ImagesCount = 5;
        Bitmap[] gifImages;

        public Form1()
        {
            InitializeComponent();

            // загружаем картинки
            gifImages = new Bitmap[5];
            for (int i = 0; i < ImagesCount; i++)
            {
                string path = Environment.CurrentDirectory + "\\" + (i + 1).ToString() + ".gif";
                gifImages[i] = new Bitmap(path);
                ImageAnimator.Animate(gifImages[i], new EventHandler(this.OnFrameChanged));
            }
        }

        private void OnFrameChanged(object o, EventArgs e)
        {
            Invalidate();
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            ImageAnimator.UpdateFrames();
            
            for(int i = 0; i < ImagesCount; i++)
                e.Graphics.DrawImage(gifImages[i], new Point(0, i * 20));
        }
    }



--------------------
user posted image
PM MAIL WWW   Вверх
Mutronics
Дата 21.7.2007, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо я тут уже сам состряпал.
Код

using System;
using System.Drawing;
using System.Windows.Forms;

namespace NeoSphere
{
    public partial class frmSmiles : Form
    {
        PictureBox newsmile;
        Bitmap gif;

        public frmSmiles()
        {
            InitializeComponent();
        }

        private void OnFrameChanged(object o, EventArgs e)
        {
            Invalidate();
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            ImageAnimator.UpdateFrames();
        }

        private void frmSmiles_Load(object sender, EventArgs e)
        {
            int n = 0;
            for (int i = 1; i < 4; i++)
            {
                newsmile = new PictureBox();
                newsmile.Width = 30;
                newsmile.Height = 30;
                newsmile.Location = new Point(0, n);
                newsmile.BorderStyle = BorderStyle.FixedSingle;
                newsmile.SizeMode = PictureBoxSizeMode.CenterImage;
                newsmile.Cursor = Cursors.Hand;
                gif = new Bitmap(@"cache\\smiles\\" + i + ".gif");
                newsmile.Image = gif;
                this.Controls.Add(newsmile);
                ImageAnimator.Animate(gif, new EventHandler(this.OnFrameChanged));
                n = n + 31;
            }
        }
    }
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




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


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

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