Gif trop lent

Messages postés
71
Date d'inscription
jeudi 6 mars 2003
Statut
Membre
Dernière intervention
8 juin 2007
- - Dernière réponse : Lutinore
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
- 25 déc. 2005 à 07:50
Bonjour,

Je voudrai afficher une gif animée dans une boite de dialogue d'attente.

J'ai donc simplement utilisé un composant pictureBox, cela fonctionne
mais le seul problème c'est que l'animation apparaît toute saccadée (le
nombre d'images seconde est considérablement ralenti par rapport à
celui du gif original).

Connaissez vous un composant qui pourrait pallier à ceci ou bien le moyen d'augmenter le nombre d'images secondes du gif?

Merci
Afficher la suite 

6 réponses

Messages postés
318
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
30 décembre 2005
0
Merci
Salut,

Dis moi un truc, ta machine serait pas super chargée au démarrage de ton appli.
Ca expliquerai le ralentissement.

Sinon, l'affichage et le chargement sont multiThreadé?

Chris

N'oubliez pas de cloturer votre post.
Commenter la réponse de cs_69chris
Messages postés
71
Date d'inscription
jeudi 6 mars 2003
Statut
Membre
Dernière intervention
8 juin 2007
0
Merci
Salut,

Non la machine
n'est pas spécialement surchargée quand je lance l'appli.

Sinon pour l'instant je ne fais que tester la form et il n'y pas de traitement
qui s'effectue parallèlement à l'affichage qui est dans le thread principal.
Commenter la réponse de SyDaze
Messages postés
318
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
30 décembre 2005
0
Merci
Alors, zarb ton truc.
Ton GIF est pas trop gros?

Chris

N'oubliez pas de cloturer votre post.
Commenter la réponse de cs_69chris
Messages postés
71
Date d'inscription
jeudi 6 mars 2003
Statut
Membre
Dernière intervention
8 juin 2007
0
Merci
13,5 KB, à noter que je suis sous Windows 2000 SP4 je ne sais pas si ça peut influer.
Commenter la réponse de SyDaze
Messages postés
318
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
30 décembre 2005
0
Merci
13Ko, C léger. Et bien moi pas comprendre.
J'ai utilisé la technique pour faire un écran de démarrage pour un client et j'ai eu aucun Pb.
Il est vrai j'étais sou XP, mais pourquoi ça changerai quelque chose....

Sinon, tu as fait l'essai de mettre ton gif directement sur une form et de l'afficher comme ça, sans rien faire.

Enfin, franchement, je suis à court d'idée.

Chris

N'oubliez pas de cloturer votre post.
Commenter la réponse de cs_69chris
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
29
0
Merci
Salut, normalement un gif dans une PictureBox ça marche bien, doit y'avoir un problème ailleurs..

1 - Tu peux récupérer toutes les frames de ton gif et les animées avec l'aide d'un timer, j'ai mis un exemple sur le site mais je ne sais plus ou.

2 - Tu peux utiliser la classe ImageAnimator pour afficher ton gif directement sur une forme ( à moins que ce soit lui qui soit bugé ! )

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


namespace Test
{
class MainForm : Form
{
private Image img;
private Rectangle dst;


private MainForm( ) : base( )
{
img = Image.FromFile( "D:\\Data\\Image\\Picture\\Flex.gif" );
dst = new Rectangle( 0, 0, img.Width, img.Height );

if ( ImageAnimator.CanAnimate( img ) )
ImageAnimator.Animate( img, new EventHandler( Frame_Changed ) );


// Evite le scintillement
this.SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.DoubleBuffer, true );
}


private void Frame_Changed( Object sd, EventArgs e )
{
ImageAnimator.UpdateFrames( img );
this.Invalidate( dst );
}


protected override void Dispose( bool disposing )
{
try
{
if ( ImageAnimator.CanAnimate( img ) )
ImageAnimator.StopAnimate( img, new EventHandler( Frame_Changed ) );
}
finally
{
base.Dispose( disposing );
}
}


protected override void OnPaint( PaintEventArgs e )
{
//base.OnPaint(e);


if ( img == null )
return;


e.Graphics.DrawImage( img, dst );
}

[ STAThread ]
private static void Main( )
{
Application.Run( new MainForm( ) );
}
}
}
Commenter la réponse de Lutinore