wpf 添加动态图片
我想要显示一张gif的图片,这个图片有多个图层合成,有动态的效果不知道该如何显示,,用什么控件好呢??我直接将图片赋值给image,图片只会显示其中一个图层,不会动态的变...
我想要显示一张gif的图片,这个图片有多个图层合成,有动态的效果
不知道该如何显示,,用什么控件好呢??
我直接将图片赋值给image,图片只会显示其中一个图层,不会动态的变化。。
先贴10,,如有帮忙解决问题,我会追加15分。。。
先谢过啦。。。 展开
不知道该如何显示,,用什么控件好呢??
我直接将图片赋值给image,图片只会显示其中一个图层,不会动态的变化。。
先贴10,,如有帮忙解决问题,我会追加15分。。。
先谢过啦。。。 展开
2个回答
展开全部
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上去。很好吧!是不是也比较有才呢?
来自: http://hi.baidu.com/mych/blog/item/1eb14f545f12a752564e00be.html
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上去。很好吧!是不是也比较有才呢?
来自: http://hi.baidu.com/mych/blog/item/1eb14f545f12a752564e00be.html
微测检测5.10
2023-05-10 广告
2023-05-10 广告
您好!建议咨 深圳市微测检测有限公司,已建立起十余个专业实验室,企业通过微测检测就可以获得一站式的测试与认 证解决方案;(EMC、RF、MFi、BQB、QI、USB、安全、锂电池、快充、汽车电子EMC、汽车手机互 联、语音通话质量),认证遇...
点击进入详情页
本回答由微测检测5.10提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询