Какой тип управления мне следует использовать - Image
, MediaElement
и т. Д.?
.net
wpf
animated-gif
ironpaw
источник
источник
Ответы:
Я не мог заставить самый популярный ответ на этот вопрос (выше Дарио) работать должным образом. В результате получилась странная, прерывистая анимация со странными артефактами. Лучшее решение, которое я нашел до сих пор: https://github.com/XamlAnimatedGif/WpfAnimatedGif
Вы можете установить его с NuGet
PM> Install-Package WpfAnimatedGif
и использовать его в новом пространстве имен в окне, где вы хотите добавить изображение GIF и использовать его, как показано ниже
Пакет действительно аккуратный, вы можете установить некоторые атрибуты, как показано ниже
и вы можете использовать его в своем коде:
РЕДАКТИРОВАТЬ: поддержка Silverlight
Согласно комментарию josh2112, если вы хотите добавить поддержку анимированного GIF в свой проект Silverlight, используйте github.com/XamlAnimatedGif/XamlAnimatedGif
источник
img
здесь?Я публикую решение, расширяющее возможности управления изображением и использующее Gif Decoder. GIF-декодер имеет свойство кадров. Я оживляю
FrameIndex
собственность. СобытиеChangingFrameIndex
изменяет свойство источника на кадр, соответствующийFrameIndex
(то есть в декодере). Я думаю, что GIF имеет 10 кадров в секунду.Пример использования (XAML):
источник
Int32AnimationUsingKeyFrames
gf.Frames[0].MetaData.GetQuery("/grctlext/Delay")
(возвращает ushort, который является длительностью кадра в сотнях секунд)Я тоже сделал поиск и нашел несколько разных решений в одной ветке на старых форумах MSDN. (ссылка больше не работает, поэтому я удалил ее)
Кажется, что проще всего выполнить WinForms
PictureBox
управления , и все пошло так (изменилось несколько вещей из потока, большинство из них то же самое).Сначала добавьте ссылку на
System.Windows.Forms
,WindowsFormsIntegration
иSystem.Drawing
на ваш проект.Затем в
Window_Loaded
обработчике вы должны задать дляpictureBoxLoading.ImageLocation
свойства путь к файлу изображения, который вы хотите показать.Элемент
MediaElement
управления упоминался в этой ветке, но также упоминалось, что это довольно тяжелый элемент управления, поэтому было несколько альтернатив, в том числе по меньшей мере 2 самодельных элемента управления, основанных наImage
элементе управления, так что это самый простой.источник
AllowTransparency="True"
. Будет ли это давать результаты, которые вы имеете в виду, это другой вопрос. Я сам не пробовал, но держу пари, чтоWindowsFormsHost
это не станет прозрачным. Остальная частьWindow
мощи. Я думаю, тебе просто придется это попробовать.Как насчет этого крошечного приложения: Код позади:
XAML:
источник
<MediaElement LoadedBehavior="Play" Source="{Binding MyGifFile}" >
- MyGifFile - это просто имя файла (и путь) моего анимированного GIF.ListBox
, или связывать вообще? Я пробовал без привязки, просто поместите путь к файлу в Source, и он появляется, но не анимирует. Если я использую связывание, даже еслиListBox
оно не для меня, оно вообще не подходит - это даст мне исключение, что мой путь к файлу неверный, даже если он тот же, который я использую, когда он появляется.Это очень просто, если вы используете
<MediaElement>
:источник
public string SpinnerLogoPath => Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Assets\images\mso_spinninglogo_blue_2.gif");
. Обязательно установите для файла значение Build = Content и скопируйте его в выходной каталог.Вот моя версия управления анимированными изображениями. Вы можете использовать стандартное свойство Source для указания источника изображения. Я далее улучшил это. Я русский, проект русский, поэтому комментарии тоже на русском. Но в любом случае вы сможете понять все без комментариев. :)
источник
Я использую эту библиотеку: https://github.com/XamlAnimatedGif/WpfAnimatedGif
Сначала установите библиотеку в ваш проект (с помощью Package Manager Console):
Затем используйте этот фрагмент в файл XAML:
Надеюсь поможет.
Источник: https://github.com/XamlAnimatedGif/WpfAnimatedGif
источник
В основном то же самое решение PictureBox выше, но на этот раз с выделенным кодом для использования встроенного ресурса в вашем проекте:
В XAML:
В коде позади:
источник
Я изменил код Майка Эшвы и сделал так, чтобы он работал лучше. Вы можете использовать его с 1frame jpg png bmp или mutil-frame gif. Если вы хотите связать URI с элементом управления, связать свойства UriSource или связать любой поток памяти, который вы связываете свойство Source, которое является BitmapImage.
Это пользовательский элемент управления. Вам необходимо создать его в проекте приложения WPF и удалить стилевое переопределение стиля.
источник
У меня была эта проблема, пока я не обнаружил, что в WPF4 вы можете имитировать свои собственные анимации изображений ключевых кадров. Сначала разделите анимацию на серию изображений, назовите их как «Image1.gif», «Image2, gif» и т. Д. Импортируйте эти изображения в ресурсы вашего решения. Я предполагаю, что вы положили их в расположение ресурса по умолчанию для изображений.
Вы собираетесь использовать контроль изображения. Используйте следующий код XAML. Я удалил несущественное.
источник
Спасибо за ваш пост, Джоэл, он помог мне решить проблему отсутствия поддержки WPF для анимированных GIF-файлов. Просто добавив немного кода, так как у меня было много времени с настройкой свойства pictureBoxLoading.Image из-за API Winforms.
Мне нужно было установить действие по созданию анимационного изображения GIF как «Содержимое», а каталог «Копировать в выходной файл» - «Копировать, если новее» или «всегда». Затем в MainWindow () я вызвал этот метод. Единственная проблема заключается в том, что когда я пытался избавиться от потока, он дал мне красный конверт вместо моего изображения. Я должен решить эту проблему. Это избавило от необходимости загружать BitmapImage и превращать его в растровое изображение (что, очевидно, убило мою анимацию, потому что это больше не gif).
источник
.ImageLocation
вместо.Image
. У него был неправильный метод..ImageLocation
работает от корня проекта Visual Studio, так что у вас естьImages
папка, ваш путь будетimgBox.ImageLocation = "/Images/my.gif";
. Если у вас есть папка с именем ,Views
где у вас есть вид , который будет показывать изображение, чтобы получить обратно доImages
, вы должны использовать 2 точки:imgBox.ImageLocation = "../Images/my.gif";
.Я пробовал весь путь выше, но у каждого есть свои недостатки, и благодаря всем вам я работаю над собственным GifImage:
Использование:
Так как это не приведет к утечке памяти и анимирует собственную временную шкалу изображения GIF, вы можете попробовать это.
источник
IsAutoStart
, но в остальном работал как чемпион!Ранее я сталкивался с подобной проблемой, мне нужно было воспроизвести
.gif
файл в вашем проекте. У меня было два варианта:используя PictureBox из WinForms
используя стороннюю библиотеку, такую как WPFAnimatedGif от codeplex.com.
Версия с
PictureBox
не работала у меня, и проект не мог использовать внешние библиотеки для этого. Таким образом, я сделал это для себяBitmap
с помощьюImageAnimator
. Потому что стандартBitmapImage
не поддерживает воспроизведение.gif
файлов.Полный пример:
XAML
Code behind
Bitmap
не поддерживает директиву URI , поэтому я загружаю.gif
файл из текущего каталога.источник
Небольшое улучшение
GifImage.Initialize()
метода, который считывает правильную синхронизацию кадров из метаданных GIF.источник
Я не уверен, что это было решено, но лучше всего использовать библиотеку WpfAnimatedGid . Это очень легко, просто и прямо в использовании. Это требует только 2 строки кода XAML и около 5 строк кода C # в коде позади.
Вы увидите все необходимые детали того, как это можно использовать там. Это то, что я также использовал вместо того, чтобы заново изобретать колесо
источник
Добавляя к основному ответу, который рекомендует использовать WpfAnimatedGif , вы должны добавить следующие строки в конце, если вы меняете изображение на Gif, чтобы убедиться, что анимация действительно выполняется:
Итак, ваш код будет выглядеть так:
источник
Проверьте мой код, я надеюсь, что это помогло вам :)
или
источник
Альтернатива ожидающей анимации в WPF:
Он покажет анимированный индикатор выполнения.
источник