WPF Image Transformation - PullRequest
       18

WPF Image Transformation

2 голосов
/ 14 марта 2011

У меня есть простые графические изображения, которые я хотел бы преобразовать при инициируемых событиях. Преобразование означает изменение ширины или перемещение ее в другое положение.

Сейчас я использую элемент 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>

Работает так же, как анимация, которую я применил к ширине и размеру. Однако, это все еще мерцает! Есть ли разумные объяснения?

1 Ответ

2 голосов
/ 14 марта 2011

Если вы анимируете ширину изображения, вы заставляете WPF перерисовывать изображение и каждый раз создавать его из скетча.Он проходит как процесс макета, так и процесс рендеринга, что заставляет его мерцать и работать не так хорошо, как могло бы быть.

Наилучшим вариантом здесь является анимация ScaleTransform.ScaleTransform полностью аппаратно реализован через DirectX, и поэтому он будет очень быстрым, он не будет мерцать, и качество изображения должно оставаться почти одинаковым на протяжении всего пути.(если, конечно, вы существенно не измените его размер, в этом случае вы потеряете разрешение.)

...