我有以下的定制UserControl
代表我的应用程序的卡片:当的RenderTransform RotateTransform模糊图像
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:Core="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Namespace="clr-namespace:MyApp" xmlns:Properties="clr-namespace:MyApp.Properties" Core:Class="MyApp.Card" Height="176" RenderTransformOrigin="0.5,0.5" Width="83" UseLayoutRounding="True">
<UserControl.LayoutTransform>
<TransformGroup>
<RotateTransform/>
<ScaleTransform/>
</TransformGroup>
</UserControl.LayoutTransform>
<UserControl.RenderTransform>
<TransformGroup>
<RotateTransform/>
<ScaleTransform/>
</TransformGroup>
</UserControl.RenderTransform>
<UserControl.Resources>
<Namespace:ImagesConverter Core:Key="ImagesConverter"/>
</UserControl.Resources>
<Canvas Core:Name="Layout">
<Image Core:Name="Image" HorizontalAlignment="Left" Source="{Binding Source={Core:Static Properties:Resources.Cards}, Converter={StaticResource ImagesConverter}}" Stretch="None" VerticalAlignment="Top">
<Image.Clip>
<RectangleGeometry Core:Name="Clipping" Rect="0,0,83,176"/>
</Image.Clip>
<Image.RenderTransform>
<TranslateTransform Core:Name="Translation" X="0" Y="0"/>
</Image.RenderTransform>
</Image>
<Rectangle Core:Name="Highlight" Canvas.Left="-2" Canvas.Top="-2" Height="180" Opacity="0.7" Stroke="#FFFFF500" StrokeThickness="3" Visibility="Collapsed" Width="87"/>
</Canvas>
</UserControl>
正如你可以看到... ...我有一个包含所有的卡面有点PNG图像,然后,我在构造函数中创建了一个传递Suit
和Rank
枚举值的新卡片,我计算了正确的剪切rectagle和图像转换。 一切工作就像一个魅力...除非我尝试使用需要90°旋转的Storyboard
动画我的卡。这里是我的代码(Storyboard
在MainWindow.Resources
定义):
<DoubleAnimation BeginTime="00:00:00.4" Duration="00:00:00.2" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(RotateTransform.Angle)" To="90"/>
,这里是结果:
我不明白这是怎么回事..但是你可以看到图像变得很模糊。我尝试在我的卡控制中使用UseLayoutRounding="True"
,并在我的MainWindow
中使用SnapsToDevicePixels="True"
,正如其他地方所建议的那样...但它不起作用! 当然......如果我使用LayoutTransform
而不是RenderTransform
旋转卡片,一切都很完美,并且卡片不是模糊的......但是我不能让卡片围绕它的中心旋转,我的动画需要旋转90°中央。动画Canvas.Top
对卡片高度的一半和布局旋转看起来像一个非常unbrilliant的解决方案......这也使我的动画看起来非常糟糕。 你能给我一个解决方案吗?
[编辑]我试图用RenderOptions.BitmapScalingMode="NearestNeighbor"
和RenderOptions.EdgeMode="Aliased"
...但它会变得更糟:
见我的编辑...它得到比:( – 2013-02-16 03:08:58
似乎之前它不为模糊不清,只是坏qualitiy更糟的是,也许尝试'RenderOptions.BitmapScalingMode = “HighQuality”''SnapToDevicePixels =“True”' – 2013-02-16 03:13:14
''Canvas'同样设置UseLayoutRounding =“True”'可能会有所帮助 – 2013-02-16 03:18:53