wpf加载.json动画

wpf加载.json动画,第1张

1、安装LottieSharp包

Install-Package LottieSharp -Version 1.1.3

image-20221124224712998

Tips:1.1.3需要.NETFramework4.6.1环境,1.1.3以上需要.NET6以上环境

2、准备Lottie动画文件

image-20221124224736054

文末附Lottie下载网站,或自行寻求设计师帮助

3、XAML编写

<lottie:LottieAnimationView

x:Name="PART_Lottie"

HorizontalAlignment="Center"

VerticalAlignment="Center"

AutoPlay="True"

FileName="{Binding CurrentFile}" />

4、播放动画

控件上设置AutoPlay为True可自动播放,也可手动在后台代码中使用PlayAnimation()播放,后台 *** 作播放需要通过控件去访问方法。

<灌水>

<a herf="http://blog.csdn.net/gqqnb/article/details/7213449">您可以看下这篇博文</a>

</灌水>

<灌水>第三种方法一定会占用很大资源</灌水>

<灌水>

<a herf="https://msdn.microsoft.com/zh-cn/library/system.windows.media.imaging.bitmapsource(v=vs.110).aspx#示例">

本篇来自MSDN的文档阐述了以BitmapImage方式的实现</a>

<a herf="https://msdn.microsoft.com/zh-cn/library/system.windows.media.imaging.bitmapimage(v=vs.110).aspx">

另请参见https://msdn.microsoft.com/zh-cn/library/system.windows.media.imaging.bitmapimage(v=vs.110).aspx</a>

</灌水>

我水不下去了

另外,您为什么需要用WPF加入那么多GIF呢,毕竟IL代码做的优化已经让性能提高了,继续(挣扎)是没有很大用的。

WPF的资源占用问题很严重,其实不适合做高性能程序(参见C++与C#的性能差别)

反正我也不是要超想要采纳

就这样

WPF很强大,但是当WPF的image控件遇到gif时就只读了图片的第一帧,很好很强大!

WPF不屑于gif的简单动画!

但是这对程序员来说不大爽啊!急得我眼泪都下来了!

幸好WPF里有MediaElement这个东西,它是对MediaPlyer的一个封装,果然很强大啊。不过另我不爽的是我这里有N个gif图片就要有N个MediaElement,要了亲命了。

还是不好,如果你能想到用WebBrowseControl来实现,或者用Frame来实现,恭喜你,你太有才了!

我还是不想这么去做,才分不够啊!

重写一下WPF的image,good idea!

public class GIFImageControl : System.Windows.Controls.Image

{

delegate void OnFrameChangedDelegate()

private Bitmap m_Bitmap

public string Path { getset}

BitmapSource bitmapSource

public void AnimatedImageControl(string path)

{

Path = path

m_Bitmap = (Bitmap)Image.FromFile(path)

Width = m_Bitmap.Width

Height = m_Bitmap.Height

ImageAnimator.Animate(m_Bitmap, OnFrameChanged)

bitmapSource = GetBitmapSource()

Source = bitmapSource

}

private void OnFrameChanged(object sender, EventArgs e)

{

Dispatcher.BeginInvoke(DispatcherPriority.Normal,

new OnFrameChangedDelegate(OnFrameChangedInMainThread))

}

private void OnFrameChangedInMainThread()

{

ImageAnimator.UpdateFrames()

if (bitmapSource != null)

bitmapSource.Freeze()

bitmapSource = GetBitmapSource()

Source = bitmapSource

InvalidateVisual()

}

//private static bool loaded

private BitmapSource GetBitmapSource()

{

IntPtr inptr = m_Bitmap.GetHbitmap()

bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(

inptr, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions())

DeleteObject(inptr)

return bitmapSource

}

[DllImport("gdi32")]

static extern int DeleteObject(IntPtr o)

}

ok,用window原有的东西去绑定到wpf上去。很好吧!是不是也比较有才呢?

来自: http://hi.baidu.com/mych/blog/item/1eb14f545f12a752564e00be.html


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/bake/11416120.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存