我最近学会了如何使用'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)
为了让你的翻转更加"深度",这样看起来更像是一个真正的翻转,你可能想要用较小的比例变换进行倾斜变换.
您可能希望将对象倾斜约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)
创建一个像这样的图像组件。设置来源后,图像将从左向右翻转。