WPF重写Image实现动态图片--未测试

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);

}

转自:http://www.iteye.com/topic/1115983

时间: 2024-07-29 01:33:48

WPF重写Image实现动态图片--未测试的相关文章

【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇四:关于OneNote入库处理以及审核

篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblogs.com/baiboy/p/wpf1.html 篇三:批量处理后的txt文件入库处理:http://www.cnblogs.com/baiboy/p/wpf2.html 篇四:关于OneNote入库处理以及审核:http://www.cnblogs.com/baiboy/p/wpf3.html [

【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇三:批量处理后的txt文件入库处理

篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblogs.com/baiboy/p/wpf1.html 篇三:批量处理后的txt文件入库处理:http://www.cnblogs.com/baiboy/p/wpf2.html 篇四:关于OneNote入库处理以及审核:http://www.cnblogs.com/baiboy/p/wpf3.html [

atitit.GUI图片非规则按钮跟动态图片切换的实现模式总结java .net c# c++ web html js

atitit.GUI图片非规则按钮跟动态图片切换的实现模式总结java .net c# c++ web html js 1. 图片按钮的效果总结 1 1.1. 按钮图片自动缩放的. 1 1.2. 不要边框,如果用自定义图片做按钮背景可以设为 false. 2 1.3. 异形按钮 2 1.4. 不绘制焦点 2 1.5. 鼠标经过时的图标 2 1.6. 选中时的图标 2 1.7. 禁用时显示的图标 2 1.8. 可能需要按钮半透明效果 2 2. 图片按钮的实现 2 2.1. 优先模式:button控

如何在html5的canvas画布中绘制gif动态图片

我们都知道如何在html5的canvas画布上绘制静态图片(jpeg, png等),直接用canvas中的drawImage方法即可,那么如何绘制动态图片(gif)? 相信大家都知道动态图片之所以动态,是因为它是由很多图片按一定的帧数顺序播放而成的,因此我们是否也可以模拟这样的帧数,每隔一定的时间重新 绘制图片,就能画出动态图片呢?答案当然是YES.下面就是我自己测试的一个例子,代码如下: 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 &l

微信分享文本、图片(本地、二进制、网络图片)、音频、视频、Gif动态图片、网页信息--大汇总

首先是申请微信开放平台https://open.weixin.qq.com/ 根据提示在管理中心创建一个移动应用,最好是自己的公司的上线APP,这样审批容易通过, 审批通过后,会为创建的移动应用下发APP_ID.AppSecret 另外在网站上下载android版本的jar包即可libammsdk.jar 即可进行操作了 ~~~~~~~~~~~~~~~~开始吧,用的测试机,没有sd卡,另外我的台式机没有wifi,所以代码没测试,我后期会补上的~~~~~~~~~~~~~~~~~ activity_

动态图片 gif

简介 android不推荐使用gif图片,一般都是png的,对于gif的图片解析比较消耗资源,但是对于一些动态gif图片的播放,如果比较小的话还是可以的,要是大的话,建议还是把gif图片转换成一帧一帧的png图片,然后通过animation播放. 对于小的gif动态图片,可以通过Movie来播放. 注意,不能再布局中以自定义view的形式使用. Activity public class MainActivity extends Activity {     LinearLayout root;

展示动态图片(播放一组图片)

//展示动态图片(播放一组图片)    //创建做动画的图片,存储到数组中    NSMutableArray * animationImages = [NSMutableArray array];    for (int i = 0 ; i < 7 ; i ++) {        UIImage * image1 = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString string

wpf arcgis engine 当前没有或未启用Spatial Analyst许可解决办法

用wpf 在做叠加分析时 遇到了一个错误:"ERROR 010096:当前没有或未启用Spatial Analyst许可":在环境中把这个Spatial Analyst扩展功能给勾了也不能解决,现在把我的解决办法写上以供参考: 解决办法是在app中初始化许可时加上一句话就行了 下面是 我在app.cs中的许可代码  放到app中的类中即可 //为alicense设置许可 //当然这之中也要引用一些类库, 都是arcgis自带的        protected override voi

Android之动态图片

在Android中,比起静态图片来动态图片会更加生动更加酷炫,因为这种视觉效果,你应该会发现我们手机中大多数应用软件的导航页面也都是采用动态图片来展示.动态图片的格式有gif.png格式等等. 我们就来看看动态图片,我们可以先自定义SurfaceView视图,然后在MainActivity中添加显示方法就行了. MainActivity: package com.cdp.dongtaitupian;; import android.app.Activity; import android.os.