Quel type de contrôle dois - je utiliser - Image
, MediaElement
etc.?
.net
wpf
animated-gif
patte de fer
la source
la source
Réponses:
Je n'ai pas pu obtenir la réponse la plus populaire à cette question (ci-dessus par Dario) pour fonctionner correctement. Le résultat a été une animation étrange et saccadée avec des artefacts étranges. Meilleure solution que j'ai trouvée jusqu'à présent: https://github.com/XamlAnimatedGif/WpfAnimatedGif
Vous pouvez l'installer avec NuGet
PM> Install-Package WpfAnimatedGif
et pour l'utiliser, dans un nouvel espace de noms dans la fenêtre où vous souhaitez ajouter l'image gif et l'utiliser comme ci-dessous
Le package est vraiment soigné, vous pouvez définir certains attributs comme ci-dessous
et vous pouvez également l'utiliser dans votre code:
EDIT: prise en charge de Silverlight
Selon le commentaire de josh2112 si vous souhaitez ajouter un support GIF animé à votre projet Silverlight, utilisez github.com/XamlAnimatedGif/XamlAnimatedGif
la source
img
ici?Je poste une solution étendant le contrôle d'image et utilisant le décodeur Gif. Le décodeur gif a une propriété frames. J'anime la
FrameIndex
propriété. L'événementChangingFrameIndex
change la propriété source en la trame correspondant àFrameIndex
(c'est-à-dire dans le décodeur). Je suppose que le gif a 10 images par seconde.Exemple d'utilisation (XAML):
la source
Int32AnimationUsingKeyFrames
gf.Frames[0].MetaData.GetQuery("/grctlext/Delay")
(retourne une courte durée qui est la durée de la trame en centaines de secondes)Moi aussi, j'ai fait une recherche et trouvé plusieurs solutions différentes dans un seul fil sur les anciens forums MSDN. (le lien ne fonctionnait plus, je l'ai donc supprimé)
Le plus simple à exécuter semble être d'utiliser un
PictureBox
contrôle WinForms , et est allé comme ça (a changé quelques choses du fil, la plupart du même).Ajoutez d'abord une référence à
System.Windows.Forms
,WindowsFormsIntegration
etSystem.Drawing
à votre projet.Ensuite, dans le
Window_Loaded
gestionnaire, vous devez définir lapictureBoxLoading.ImageLocation
propriété sur le chemin du fichier image que vous souhaitez afficher.Le
MediaElement
contrôle a été mentionné dans ce fil, mais il est également mentionné qu'il s'agit d'un contrôle plutôt lourd, il y avait donc un certain nombre d'alternatives, y compris au moins 2 contrôles homebrewed basés sur leImage
contrôle, c'est donc le plus simple.la source
AllowTransparency="True"
. Que cela produise ou non les résultats que vous avez en tête est une autre question. Je ne l'ai pas essayé moi-même, mais je parierais queWindowsFormsHost
cela ne deviendrait pas transparent du tout. Le reste de laWindow
puissance. Vous devrez simplement l'essayer, je pense.Que diriez-vous de cette petite application: code derrière:
XAML:
la source
<MediaElement LoadedBehavior="Play" Source="{Binding MyGifFile}" >
- Le MyGifFile est juste le nom de fichier (et le chemin) de mon gif animé.ListBox
, ou de se lier du tout? Je l'ai essayé sans liaison, mettez simplement le chemin du fichier dans la source et il apparaît, mais ne s'anime pas. Si j'utilise la liaison, même avec leListBox
, cela ne se produit pas du tout, pour moi - cela me donnera une exception que mon chemin de fichier est incorrect, même s'il est le même que celui que j'utilise lorsqu'il apparaît.C'est très simple si vous utilisez
<MediaElement>
:la source
public string SpinnerLogoPath => Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Assets\images\mso_spinninglogo_blue_2.gif");
. Assurez-vous de définir le fichier sur Build = Content et de le copier dans le répertoire de sortie.Voici ma version du contrôle d'image animée. Vous pouvez utiliser la propriété standard Source pour spécifier la source d'image. Je l'ai encore amélioré. Je suis russe, le projet est russe donc les commentaires sont également en russe. Mais de toute façon, vous devriez pouvoir tout comprendre sans commentaires. :)
la source
J'utilise cette bibliothèque: https://github.com/XamlAnimatedGif/WpfAnimatedGif
Tout d'abord, installez la bibliothèque dans votre projet (à l'aide de la console du gestionnaire de packages):
Ensuite, utilisez cet extrait dans le fichier XAML:
J'espère que ça aide.
Source: https://github.com/XamlAnimatedGif/WpfAnimatedGif
la source
Fondamentalement, la même solution PictureBox ci-dessus, mais cette fois avec le code-behind pour utiliser une ressource intégrée dans votre projet:
En XAML:
Dans Code-Behind:
la source
J'ai modifié le code de Mike Eshva, et je l'ai fait mieux fonctionner. Vous pouvez l'utiliser avec 1frame jpg png bmp ou mutil-frame gif.Si vous voulez lier un uri au contrôle, liez les propriétés UriSource ou vous voulez lier n'importe quel in- flux de mémoire que vous liez à la propriété Source qui est un BitmapImage.
Il s'agit d'un contrôle personnalisé. Vous devez le créer dans WPF App Project et supprimer le remplacement de modèle avec style.
la source
J'ai eu ce problème, jusqu'à ce que je découvre que dans WPF4, vous pouvez simuler vos propres animations d'images clés. Tout d'abord, divisez votre animation en une série d'images, nommez-les quelque chose comme "Image1.gif", "Image2, gif", etc. Importez ces images dans les ressources de votre solution. Je suppose que vous les avez placés dans l'emplacement de ressource par défaut pour les images.
Vous allez utiliser le contrôle Image. Utilisez le code XAML suivant. J'ai supprimé les éléments non essentiels.
la source
Merci pour votre message Joel, cela m'a aidé à résoudre l'absence de prise en charge de WPF pour les GIF animés. Je viens d'ajouter un peu de code car j'ai eu beaucoup de mal à définir la propriété pictureBoxLoading.Image en raison de l'API Winforms.
J'ai dû définir l'action de construction de mon image gif animée comme "Contenu" et le répertoire Copier vers la sortie à "Copier si plus récent" ou "toujours". Ensuite, dans MainWindow (), j'ai appelé cette méthode. Le seul problème est que lorsque j'ai essayé de supprimer le flux, cela m'a donné un graphique d'enveloppe rouge au lieu de mon image. Je vais devoir résoudre ce problème. Cela a supprimé la douleur de charger une BitmapImage et de la transformer en Bitmap (ce qui a évidemment tué mon animation car ce n'est plus un gif).
la source
.ImageLocation
place de.Image
. Il avait la mauvaise méthode..ImageLocation
fonctionne à partir de la racine du projet Visual Studio, alors disons que vous avez unImages
dossier, votre chemin est alorsimgBox.ImageLocation = "/Images/my.gif";
. Si vous avez un dossier appeléViews
où vous avez une vue qui affiche l'image, pour revenir àImages
, vous auriez à utiliser 2 points:imgBox.ImageLocation = "../Images/my.gif";
.J'ai essayé tout le chemin ci-dessus, mais chacun a sa brièveté, et grâce à vous tous, je travaille sur mon propre GifImage:
Usage:
Comme cela ne causerait pas de fuite de mémoire et animerait la propre ligne temporelle de l'image gif, vous pouvez l'essayer.
la source
IsAutoStart
, mais sinon, a fonctionné comme un champion!Auparavant, j'ai rencontré un problème similaire, j'avais besoin de lire un
.gif
fichier dans votre projet. J'avais deux choix:en utilisant PictureBox de WinForms
en utilisant une bibliothèque tierce, telle que WPFAnimatedGif de codeplex.com.
La version avec
PictureBox
ne fonctionnait pas pour moi et le projet ne pouvait pas utiliser de bibliothèques externes pour cela. Je l'ai donc fait pour moiBitmap
avec de l'aideImageAnimator
. Parce que, standardBitmapImage
ne prend pas en charge la lecture des.gif
fichiers.Exemple complet:
XAML
Code behind
Bitmap
ne prend pas en charge la directive URI , je charge donc le.gif
fichier à partir du répertoire actuel.la source
Petite amélioration de la
GifImage.Initialize()
méthode, qui lit le bon timing de trame à partir des métadonnées GIF.la source
Je ne sais pas si cela a été résolu mais la meilleure façon est d'utiliser la bibliothèque WpfAnimatedGid . Il est très facile, simple et direct à utiliser. Il ne nécessite que 2 lignes de code XAML et environ 5 lignes de code C # dans le code derrière.
Vous verrez tous les détails nécessaires sur la façon dont cela peut être utilisé là-bas. C'est ce que j'ai aussi utilisé au lieu de réinventer la roue
la source
En plus de la réponse principale qui recommande l'utilisation de WpfAnimatedGif , vous devez ajouter les lignes suivantes à la fin si vous échangez une image avec un Gif pour vous assurer que l'animation s'exécute réellement:
Votre code ressemblera donc à:
la source
Vérifiez mon code, j'espère que cela vous a aidé :)
ou
la source
Une alternative à l'animation en attente dans WPF est:
Il affichera une barre de progression animée.
la source