¿Qué tipo de control debería utilizar - Image
, MediaElement
, etc.?
.net
wpf
animated-gif
pata de hierro
fuente
fuente
Respuestas:
No pude obtener la respuesta más popular a esta pregunta (arriba por Dario) para que funcione correctamente. El resultado fue una animación extraña y entrecortada con artefactos extraños. La mejor solución que he encontrado hasta ahora: https://github.com/XamlAnimatedGif/WpfAnimatedGif
Puedes instalarlo con NuGet
PM> Install-Package WpfAnimatedGif
y para usarlo, en un nuevo espacio de nombres a la ventana donde desea agregar la imagen gif y usarla como se muestra a continuación
El paquete es realmente ordenado, puede establecer algunos atributos como a continuación
y también puedes usarlo en tu código:
EDITAR: soporte Silverlight
Según el comentario de josh2112 si desea agregar soporte GIF animado a su proyecto Silverlight, use github.com/XamlAnimatedGif/XamlAnimatedGif
fuente
img
aquiPublico una solución que extiende el control de la imagen y usa el Decodificador de GIF. El decodificador de gif tiene una propiedad de marcos. Animo la
FrameIndex
propiedad. El eventoChangingFrameIndex
cambia la propiedad de origen al marco correspondiente alFrameIndex
(que está en el decodificador). Supongo que el gif tiene 10 cuadros por segundo.Ejemplo de uso (XAML):
fuente
Int32AnimationUsingKeyFrames
gf.Frames[0].MetaData.GetQuery("/grctlext/Delay")
(devuelve un valor corto que es la duración del fotograma en cientos de segundos)Yo también hice una búsqueda y encontré varias soluciones diferentes en solo un hilo en los viejos foros de MSDN. (el enlace ya no funcionaba, así que lo eliminé)
La forma más simple de ejecutar parece ser usar un WinForms
PictureBox
control , y así fue (cambió algunas cosas del hilo, la mayoría de las mismas).Agregue una referencia a
System.Windows.Forms
,WindowsFormsIntegration
ySystem.Drawing
a su proyecto primero.Luego, en el
Window_Loaded
controlador, establecería lapictureBoxLoading.ImageLocation
propiedad en la ruta del archivo de imagen que desea mostrar.El
MediaElement
control se mencionó en ese hilo, pero también se menciona que es un control bastante pesado, por lo que había una serie de alternativas, que incluían al menos 2 controles caseros basados en elImage
control, por lo que este es el más simple.fuente
AllowTransparency="True"
. Si eso producirá o no los resultados que tiene en mente es otro asunto. No lo he intentado yo mismo, pero apuesto a queWindowsFormsHost
no se volverá transparente en absoluto. El resto delWindow
poder. Simplemente tendrás que probarlo, creo.¿Qué tal esta pequeña aplicación? Código detrás:
XAML:
fuente
<MediaElement LoadedBehavior="Play" Source="{Binding MyGifFile}" >
: MyGifFile es solo el nombre del archivo (y la ruta) de mi gif animado.ListBox
, o ligarse en absoluto? Lo probé sin vinculación, simplemente puse la ruta del archivo en la Fuente y aparece, pero no se anima. Si uso el enlace, incluso con elListBox
, no aparece en absoluto, para mí, me dará una excepción de que mi ruta de archivo es incorrecta, a pesar de que es la misma que uso cuando aparece.Es muy simple si usas
<MediaElement>
:fuente
public string SpinnerLogoPath => Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Assets\images\mso_spinninglogo_blue_2.gif");
. Asegúrese de configurar el archivo en Build = Content y copie en el directorio de salida.Aquí está mi versión de control de imagen animada. Puede usar la propiedad estándar Fuente para especificar la fuente de la imagen. Lo mejoré aún más. Soy ruso, el proyecto es ruso, así que los comentarios también están en ruso. Pero de todos modos deberías poder entender todo sin comentarios. :)
fuente
Yo uso esta biblioteca: https://github.com/XamlAnimatedGif/WpfAnimatedGif
Primero, instale la biblioteca en su proyecto (usando Package Manager Console):
Luego, use este fragmento en el archivo XAML:
Espero ayuda
Fuente: https://github.com/XamlAnimatedGif/WpfAnimatedGif
fuente
Básicamente, la misma solución PictureBox anterior, pero esta vez con el código subyacente para usar un recurso integrado en su proyecto:
En XAML:
En Code-Behind:
fuente
Modifiqué el código de Mike Eshva, y lo hice funcionar mejor. Puedes usarlo con 1frame jpg png bmp o mutil-frame gif. Si quieres vincular una uri al control, vincula las propiedades de UriSource o quieres vincular cualquier flujo de memoria que une la propiedad de origen, que es una imagen de mapa de bits.
Este es un control personalizado. Debe crearlo en WPF App Project y eliminar la anulación de plantilla con estilo.
fuente
Tuve este problema, hasta que descubrí que en WPF4, puedes simular tus propias animaciones de imágenes de fotogramas clave. Primero, divida su animación en una serie de imágenes, asígneles un título similar a "Image1.gif", "Image2, gif", etc. Importe esas imágenes en los recursos de su solución. Supongo que los coloca en la ubicación de recursos predeterminada para las imágenes.
Vas a usar el control de imagen. Use el siguiente código XAML. He eliminado lo no esencial.
fuente
Gracias por tu publicación Joel, me ayudó a resolver la ausencia de soporte de WPF para GIF animados. Solo agregué un pequeño código ya que tuve un montón de tiempo configurando la propiedad pictureBoxLoading.Image debido a la API Winforms.
Tuve que configurar la Acción de compilación de mi imagen GIF animada como "Contenido" y Copiar al directorio de salida en "Copiar si es más reciente" o "siempre". Luego, en MainWindow (), llamé a este método. El único problema es que cuando intenté deshacerme de la transmisión, me dio un gráfico de sobre rojo en lugar de mi imagen. Tendré que resolver ese problema. Esto eliminó el dolor de cargar una imagen de mapa de bits y cambiarla a un mapa de bits (que obviamente mató mi animación porque ya no es un gif).
fuente
.ImageLocation
lugar de.Image
. Tenía el método equivocado..ImageLocation
funciona desde la raíz del proyecto de Visual Studio, así que supongamos que tiene unaImages
carpeta, su ruta es entoncesimgBox.ImageLocation = "/Images/my.gif";
. Si usted tiene una carpeta llamadaViews
donde se tiene una vista que mostrará la imagen, para volver aImages
, usted tendría que usar 2 puntos:imgBox.ImageLocation = "../Images/my.gif";
.He intentado todo el camino anterior, pero cada uno tiene su brevedad, y gracias a todos ustedes, trabajo mi propio GifImage:
Uso:
Como no causaría pérdida de memoria y animó la línea de tiempo de la imagen GIF, puede probarlo.
fuente
IsAutoStart
, pero de lo contrario, funcionó como un campeón.Anteriormente, me enfrentaba a un problema similar, necesitaba reproducir el
.gif
archivo en su proyecto. Tenía dos opciones:usando PictureBox de WinForms
utilizando una biblioteca de terceros, como WPFAnimatedGif de codeplex.com.
La versión con
PictureBox
no funcionó para mí, y el proyecto no podía usar bibliotecas externas para ello. Así que lo hice por mí mismoBitmap
con ayudaImageAnimator
. Porque, el estándarBitmapImage
no admite la reproducción de.gif
archivos.Ejemplo completo:
XAML
Code behind
Bitmap
no es compatible con la directiva URI , por lo que cargo el.gif
archivo desde el directorio actual.fuente
Pequeña mejora del
GifImage.Initialize()
método, que lee el tiempo de trama adecuado de los metadatos GIF.fuente
No estoy seguro de si esto se ha resuelto, pero la mejor manera es usar el biblioteca WpfAnimatedGid . Es muy fácil, simple y directo de usar. Solo requiere 2 líneas de código XAML y alrededor de 5 líneas de código C # en el código detrás.
Verá todos los detalles necesarios de cómo se puede usar esto allí. Esto es lo que también usé en lugar de reinventar la rueda
fuente
Agregando a la respuesta principal que recomienda el uso de WpfAnimatedGif , debe agregar las siguientes líneas al final si está intercambiando una imagen con un Gif para asegurarse de que la animación realmente se ejecute:
Entonces su código se verá así:
fuente
Revisa mi código, espero que esto te haya ayudado :)
o
fuente
Una alternativa a la animación en espera en WPF es:
Mostrará una barra de progreso animada.
fuente