• 当WPF遇到了gif


     

    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 { get; set; }
    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上去。很好吧!是不是也比较有才呢?

  • 相关阅读:
    Pwn-warmup_csaw_2016 writeup
    操作系统习题总结
    操作系统-存储器管理部分(待更新)
    树与二叉树之间的互相转换
    黑客攻防技术宝典-反病毒篇笔记(三)
    jaegeropentracing的Java-client完整分布式追踪链
    jaegeropentracing的Java-client
    IDEA2018.2版本注册
    Spring整合CXF webservice restful 实例
    带有WS-Security验证的webservice
  • 原文地址:https://www.cnblogs.com/makubexsoft/p/2128739.html
Copyright © 2020-2023  润新知