WPF图像转换

时间:2011-03-14 11:59:36

标签: c# wpf image animation transformation

我有简单的图形图像,我想在触发事件上进行转换。变换意味着改变宽度或将其移动到另一个位置。

现在我使用工具箱的Image元素和Storyboard的Animations,例如DoubleAnimation或ThicknessAnimation。

但是出现以下问题:

  1. 更改宽度时图像闪烁
  2. 图像质量各不相同,WPF是否支持矢量图形?
  3. 关于1.我的问题是,是否应该使用其他动画。


    所以我尝试了转换,请参阅代码:

        <Image Height="150" HorizontalAlignment="Left" Margin="12,0,0,0" Name="image1" Stretch="Fill" VerticalAlignment="Top" Source="images/side_view.jpg" Width="1244">
            <Image.RenderTransform>
                <ScaleTransform x:Name="Minimize"  ScaleX="1.0" ScaleY="1.0"/>
            </Image.RenderTransform>
        </Image>
    
        <Button Content="Next Train" Height="23" HorizontalAlignment="Left" Margin="528,233,0,0" Name="btnNext" VerticalAlignment="Top" Width="75" />
        <Grid.Triggers>
            <EventTrigger RoutedEvent="Button.Click" SourceName="btnNext">
                <BeginStoryboard>
                    <Storyboard TargetName="Minimize" TargetProperty="ScaleX">
                        <DoubleAnimation To="0.65" Duration="0:0:2"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
    

    与我应用于宽度和边距的动画相同。但是,它仍然闪烁!有没有合理的解释?

1 个答案:

答案 0 :(得分:2)

如果您要为图像的宽度设置动画,则会使WPF重新渲染图像,并且每次都从scatch创建它。它经历了布局过程和渲染过程,这使得它闪烁并且不能尽可能地工作。

这里最好的选择是为ScaleTransform设置动画。 ScaleTransform完全通过DirectX在硬件中完成,因此速度极快,不会闪烁,图像质量应该保持完全相同。 (除非您正在大幅度调整它,否则您将失去优点。)