如何在wpf中翻转图像

Sha*_*ank 48 c# wpf image

我最近学会了如何使用'TransformedBitmap'和'RotateTransformed'类来旋转BitmapImage.现在我能够在我的图像上执行顺时针旋转.但是如何翻转图像呢?我找不到类来执行BitmapImage的水平和垂直翻转.请帮我弄清楚如何做到这一点.例如,如果我的图像是一个看起来像'd'的图形,那么垂直翻转会产生类似'q'的东西,而水平翻转会产生类似'b'的东西.

luv*_*ere 113

使用ScaleTransform,ScaleX为-1表示水平,ScaleY为-1表示垂直翻转,应用于图像的RenderTransform 属性.RenderTransformOrigin="0.5,0.5"在图像上使用可确保图像在其中心周围翻转,因此您无需再应用其他TranslateTransform将其移动到位:

<Image Source="a.jpg" Padding="5" RenderTransformOrigin="0.5,0.5">
  <Image.RenderTransform>
    <ScaleTransform ScaleX="-1"/>
  </Image.RenderTransform>
</Image>
Run Code Online (Sandbox Code Playgroud)

用于水平翻转和

<Image Source="a.jpg" Padding="5" RenderTransformOrigin="0.5,0.5">
  <Image.RenderTransform>
    <ScaleTransform ScaleY="-1"/>
  </Image.RenderTransform>
</Image>
Run Code Online (Sandbox Code Playgroud)

垂直的.

如果你想在代码隐藏中执行它,在C#中应该看起来像这样:

img.RenderTransformOrigin = new Point(0.5,0.5);
ScaleTransform flipTrans = new ScaleTransform();
flipTrans.ScaleX = -1;
//flipTrans.ScaleY = -1;
img.RenderTransform = flipTrans;
Run Code Online (Sandbox Code Playgroud)

  • @shashank你受欢迎,你应该接受答案. (2认同)

Bra*_*ham 9

为了让你的翻转更加"深度",这样看起来更像是一个真正的翻转,你可能想要用较小的比例变换进行倾斜变换.

您可能希望将对象倾斜约20度,使其看起来像是在3D中翻转.这是一个可怜的勒芒3D翻转.您可以在WPF中完成真正的3D翻转,但这需要更多的工作.

这将为您提供看起来更干净的动画,然后您可以在两个不同的面板上切换可见性,以给出元素的正面和背面印象.

<DoubleAnimationUsingKeyFrames Storyboard.TargetName="MyControl" Storyboard.TargetProperty="(FrameworkElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
  <SplineDoubleKeyFrame KeyTime="00:00:00.0" Value="1" />
  <SplineDoubleKeyFrame KeyTime="00:00:00.09" Value="0.3" />
  <SplineDoubleKeyFrame KeyTime="00:00:00.12" Value="0.6" />                              
  <SplineDoubleKeyFrame KeyTime="00:00:00.15" Value="0.8" />
  <SplineDoubleKeyFrame KeyTime="00:00:00.18" Value="1" />
  <SplineDoubleKeyFrame KeyTime="00:00:00.2" Value="1" />
</DoubleAnimationUsingKeyFrames>

<DoubleAnimationUsingKeyFrames Storyboard.TargetName="MyControl" Storyboard.TargetProperty="(FrameworkElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)">
  <SplineDoubleKeyFrame KeyTime="00:00:00.0" Value="1" />
  <SplineDoubleKeyFrame KeyTime="00:00:00.09" Value="0.9" />
  <SplineDoubleKeyFrame KeyTime="00:00:00.18" Value="1" />
  <SplineDoubleKeyFrame KeyTime="00:00:00.2" Value="1" />
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="MyControl" Storyboard.TargetProperty="(FrameworkElement.RenderTransform).(TransformGroup.Children)[1].(SkewTransform.AngleY)">
  <SplineDoubleKeyFrame KeyTime="00:00:00" Value="0" />
  <SplineDoubleKeyFrame KeyTime="00:00:00.06" Value="-10" />
  <SplineDoubleKeyFrame KeyTime="00:00:00.09" Value="-20" />
  <SplineDoubleKeyFrame KeyTime="00:00:00.1" Value="20" />
  <SplineDoubleKeyFrame KeyTime="00:00:00.18" Value="0" />
</DoubleAnimationUsingKeyFrames>
Run Code Online (Sandbox Code Playgroud)


小智 5

<Image x:Name="SampleImage"  Margin="0" RenderTransformOrigin="0.5,0.5" >
        <Image.LayoutTransform>
            <TransformGroup>
                <ScaleTransform ScaleY="1" ScaleX="-1"/>
                <SkewTransform AngleY="0" AngleX="0"/>
                <RotateTransform Angle="0"/>
                <TranslateTransform/>
            </TransformGroup>
        </Image.LayoutTransform>
    </Image>
Run Code Online (Sandbox Code Playgroud)

创建一个像这样的图像组件。设置来源后,图像将从左向右翻转。