我有以下的定製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