浏览 5126 次
锁定老帖子 主题:wpf 添加动态图片
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-09-28
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); } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |