2011-03-14 192 views
2

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

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

然而以下问题出现:

  1. 图像改变宽度
  2. 图像质量发生变化,不支持WPF矢量图形时闪烁?

关于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> 

的工作方式相同余施加到的宽度和余量的动画。但是,它仍然在闪烁!有没有合理的解释?

回答

2

如果您正在为图像的宽度设置动画,那么您就是让WPF重新渲染图像,并且每次都从scatch创建图像。它经历了布局过程和渲染过程,这使得它闪烁并且不能像最好的那样工作。

这里最好的选择是动画ScaleTransform。 ScaleTransform完全通过DirectX以硬件完成,因此其速度非常快,不会闪烁,图像质量应该保持基本相同。 (除非当然你正在调整它大幅度在这种情况下,你会失去秘密。)

+0

@ eldad-katz:我试过ScaleTransform,但结果是一样的 - 任何想法? – 2011-03-14 13:39:03

+0

它应该按照建议工作。在你放的代码中,我没有看到名为Minimize的ScaleTransform ..但无论如何,它应该完美工作。你确定你正在做的是动画ScaleTransform吗? – 2011-03-14 13:53:23

+0

@ elad-katz:你说得对,我把错误的代码放在一起。然而,他们没有太大的差异,我编辑了它。也许它已经很好,但它不符合我的想象。这是完整的代码:http://pastebin.com/cYx5exFx – 2011-03-14 14:27:59