在WPF中,我有两个图片,需要创建一个闪烁效果(不使用不透明度)。
假设我有a.png和b.png,第一步显示a.png,0.5秒后,将显示b.png,然后再过0.5秒,将显示a.png,并重复循环,不断闪烁。
我已经查阅了论坛,但仍然没有找到vb示例,请帮忙。
您可以使用适当的动画,无需任何后台代码:
<Window.Resources>
<BitmapImage x:Key="Image1" UriSource="C:\Users\Public\Pictures\Sample Pictures\Koala.jpg"/>
<BitmapImage x:Key="Image2" UriSource="C:\Users\Public\Pictures\Sample Pictures\Jellyfish.jpg"/>
</Window.Resources>
...
<Image x:Name="image" Source="{StaticResource Image1}">
<Image.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Source"
Duration="0:0:1"
RepeatBehavior="Forever">
<DiscreteObjectKeyFrame Value="{StaticResource Image2}"
KeyTime="0:0:0.5"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Image.Triggers>
</Image>
Loaded
事件。Interval
设置为半秒钟,并在计时器的 Tick
事件处理程序中交替设置图像的 Source
属性为两个图像之一。我不太擅长vb.net,但在c#中你可以这样做
public ImageSource GetImageSourceFromImage(Bitmap pngFile)
{
MemoryStream imageStream = new MemoryStream();
pngFile.Save(imageStream, ImageFormat.Png);
imageStream.Seek(0, SeekOrigin.Begin);
return BitmapFrame.Create(imageStream);
}
这个函数会返回一个图片源,你可以直接将它赋值给你的图像对象。
a.png
的文件时,最简单的方法是调用 new BitmapImage(new Uri("path/to/a.png"));
来创建一个 ImageSource。在这里使用 WinForms 的 Bitmap 类并将其编码成流,然后再解码成 WPF 的 BitmapFrame 是没有任何意义的。 - Clemens