WPF 加载GIF图片

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

新建GifImage类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Interop;
using System.Windows.Threading;
using System.Runtime.InteropServices;
using System.Windows.Media.Imaging;
using System.Drawing;

namespace WPF_DCStation_ZTE
{
    public class GifImage : System.Windows.Controls.Image
    {
        /// <summary>
        /// gif动画的System.Drawing.Bitmap
        /// </summary>
        private Bitmap gifBitmap;

        /// <summary>
        /// 用于显示每一帧的BitmapSource
        /// </summary>
        private BitmapSource bitmapSource;

        public GifImage(string path)
        {
            this.gifBitmap = new Bitmap(path);
            this.bitmapSource = this.GetBitmapSource();
            this.Source = this.bitmapSource;
        }

        /// <summary>
        /// 从System.Drawing.Bitmap中获得用于显示的那一帧图像的BitmapSource
        /// </summary>
        /// <returns></returns>
        private BitmapSource GetBitmapSource()
        {
            IntPtr handle = IntPtr.Zero;

            try
            {
                handle = this.gifBitmap.GetHbitmap();
                this.bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(handle, IntPtr.Zero, System.Windows.Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
            }
            finally
            {
                if (handle != IntPtr.Zero)
                {
                    DeleteObject(handle);
                }
            }
            return this.bitmapSource;
        }

        /// <summary>
        /// Start animation
        /// </summary>
        public void StartAnimate()
        {
            ImageAnimator.Animate(this.gifBitmap, this.OnFrameChanged);
        }

        /// <summary>
        /// Stop animation
        /// </summary>
        public void StopAnimate()
        {
            ImageAnimator.StopAnimate(this.gifBitmap, this.OnFrameChanged);
        }

        /// <summary>
        /// Event handler for the frame changed
        /// </summary>
        private void OnFrameChanged(object sender, EventArgs e)
        {
            Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
            {
                ImageAnimator.UpdateFrames(); // 更新到下一帧
                if (this.bitmapSource != null)
                {
                    this.bitmapSource.Freeze();
                }

                //// Convert the bitmap to BitmapSource that can be display in WPF Visual Tree
                this.bitmapSource = this.GetBitmapSource();
                Source = this.bitmapSource;
                this.InvalidateVisual();
            }));
        }

        /// <summary>
        /// Delete local bitmap resource
        /// Reference: http://msdn.microsoft.com/en-us/library/dd183539(VS.85).aspx
        /// </summary>
        [DllImport("gdi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool DeleteObject(IntPtr hObject);
    }
}

窗体加载事件

或者使用相对路径

//string path = AppDomain.CurrentDomain.BaseDirectory + "Loading.gif";

private GifImage gifImage;

 private void Grid_Loaded(object sender, RoutedEventArgs e)
        {
            this.gifImage = new GifImage(@"E:\Work\WPF_demo\WPF_DCStation_ZTE\WPF_DCStation_ZTE\res\Loading.gif");//此处路径必须是绝对路径
            this.gifImage.Width = 100;
            this.gifImage.Height = 100;
            label4.Content = this.gifImage;
        }
//开始
        private void button2_Click_1(object sender, RoutedEventArgs e)
        {
            gifImage.StartAnimate();
        }
        //停止
        private void button3_Click(object sender, RoutedEventArgs e)
        {
            gifImage.StopAnimate();
        }

效果展示

WPF中显示GIF动态图 开发工具与关键技术:Visual Studio 今天用WPF做一个登录页面,用到了GIF图,然后像引用图片的方式引用GIF图; 发现GIF图片没区别,只显示出来没有动态的GIF图,然后又陆续试了一些别的方法; 发现还是解决不了这一问题,要么不会动,要么显示不出来; 在百思不得其解的时候,我选择了百度一下,然后百度出来了很多; 然后我就足一尝试,发现还是有很多方法不行; 最终发现以下这方法代码量... 阅读详情

相关推荐

WPF动画】

示例代码1示例代码2:使用 `Storyboard` 组合多个动画代码解释应用场景动画类描述使用示例适用场景用于为double类型的属性(如WidthHeight等)创建动画。控件大小的变化、透明度的渐变等。用于为Color类型的属性(如BackgroundForeground等)创建动画。背景色、前景色的渐变效果。用于为Point类型的属性(如CenterPosition等)创建动画。控件位置的变化、路径动画。用于为Thickness类型的属性(如MarginPadding等)创建动画。

zsr154278963的博客 2026

WPF颜色变化动画

WPF颜色变化动画 控件从透明到不透明动画 DoubleAnimation ks = new DoubleAnimation(); ks.From = btu1.Opacity; ks.To = 1; ks.Duration = new Duration(TimeSpan.FromSeconds(2)); btu1.BeginAnimation(Button.OpacityProperty

weixin_44022365的博客 1957

WPF中显示动态GIF

打造一个GifImage控件 http://www.cnblogs.com/zhouyinhui/archive/2007/12/23/1011555.html

Java_c# 543

使用WPF Animated GIF实现GIF图片的播放

这个类库很方便,也很简单:http://wpfanimatedgif.codeplex.com/ 参考博客:http://blog.csdn.net/gqqnb/article/details/7213449 转载于:https://www.cnblogs.com/fuchongjundream/p/3889483.html...

weixin_30415801的博客 233

WPF 加载和显示 GIF 图片的完整指南

/ 清理现有资源StopGif();// 加载GIF// 获取帧数// 提取所有帧i++)// 获取帧延迟// 显示第一帧// 开始播放PlayGif();// 获取帧延迟属性// 默认延迟 (100ms)// 返回第一帧的延迟(以毫秒为单位)if (![0];_gifBitmap?.Dispose();推荐方案:使用NuGet 包。

qq_56921730的博客 1809

WPF加载gif动态图片

WPF加载动态图片有很多种办法,下面介绍一种比较简单的办法。 右键项目,在管理程序包中添加.XamlAnimatedGif包,进行安装。

weixin_44469024的博客 1668

WPF 加载Gif动态图片的方法

WPF 加载Gif动态图片的方法

^@^lemon tea^@^ 3087

WPF加载GIf图片(通过WinFrom形式)

WPF前端代码 1.引用WinForm控件 xmlns:wfi="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration" xmlns:winForms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" 2.前端代码 <Window x:Class="WpfApp1.MainWindow"

weixin_43563837的博客 419

WPF 如何加载GIF动画图片

Visual Studio菜单栏,点击"工具" “NuGet包管理”,打开包管理页面。搜索XamlAnimatedGif包,找到想要的版本安装。一、引入XamlAnimatedGif包。二、在Xaml中使用包。

u012803643的博客 1466

WPF 加载Gif动态图片并且切圆形

WPF 加载Gif动态图片并且切圆形

qq690452074的专栏 484

WPF自定义控件之图片控件 AsyncImage

AsyncImage 是一个封装完善,使用简便,功能齐全的WPF图片控件,比直接使用Image相对来说更加方便,但它的内部仍然使用Image承载图像,只不过在其基础上进行了一次完善成熟的封装 AsyncImage解决了以下问题1) 异步加载及等待提示2) 缓存3) 支持读取多种形式的图片路径(Local,Http,Resource)4) 根据文件头识别准确的图片格式5) 静态图支持设置解码大小...

weixin_30662109的博客 678

WPF自定义控件与样式(12)-缩略图ThumbnailImage /gif动画图/图片列表

一.前言   申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接。   本文主要针对WPF项目开发中图片的各种使用问题,经过总结,把一些经验分享一下。内容包括: WPF常用图像数据源ImageSource的创建; 自定义缩略图控件ThumbnailImage,支持网络图片、...

LJianDong的博客 754

【转】WPF自定义控件与样式(12)-缩略图ThumbnailImage /gif动画图/图片列表

一.前言   申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接。   本文主要针对WPF项目开发中图片的各种使用问题,经过总结,把一些经验分享一下。内容包括: WPF常用图像数据源ImageSource的创建; 自定义缩略图控件ThumbnailImage,支持网络图片、大图片、...

weixin_34220623的博客 336

WPF加载GIF动画踩坑记录

WPF加载简单gif大致分三步: 1.添加NuGet包: 在你需要加入gif的文件引用处添加“wpfanimatedgif”引用 2.在XAML界面添加引用: xmlns:gif="http://wpfanimatedgif.codeplex.com" 加在这个位置: 3.插入gif图片的标签: <Image Name="gifImage" gif:ImageBehavior.AnimatedSource="圆圈.gif" Height="21" Width...

韦_恩的博客 1723

WPF可播放gif的image控件重写

来源:https://blog.csdn.net/wcc27857285/article/details/52993099 public class GifImage : System.Windows.Controls.Image { /// &lt;summary&gt; /// gif动画的System.Drawing.Bitmap ...

FireGhost57的专栏 717

WPF 打开本地图片加载到Image控件上

using Microsoft.Win32; // 实现方法 private void Button_Select_Click(object sender, RoutedEventArgs e) { OpenFileDialog dlg= new OpenFileDialog(); dlg.Filter = "JPG Files (*.jpg)|JPEG Files (*.jpeg)|*.jpeg|PNG Files (*.png)|*.png|*.jpg|GIF Files (*...

chulijun3107的博客 3123

WPFGIF文件的方法

注:本工程来codeproject WPF默认的IMAGE是无法让GIF文件动起来的。 下面为一种可以让GIFWPF中动起来的办法。 关键还在AnimatedGIFControl.cs文件中。 /****************************** Module Header ****...

weixin_34113237的博客 208

WPF Image控件实战:从本地到网络图片的高效加载与优化

本文深入探讨了WPF Image控件的高效加载与优化实践。从本地图片的Uri语法与性能解码,到网络图片的异步加载与缓存策略,详细解析了如何避免内存泄漏、界面卡顿等常见问题,并提供了MVVM绑定、动态GIF处理等高级场景的解决方案,帮助开发者打造流畅的图片显示体验。

www00的博客 174
上一篇: WPF 中listview右键编辑,删除,保存
下一篇: WPF 鼠标滑过Button按钮放大
CatchMe_439
博客等级 码龄10年 31粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值