我需要 Anti-alias
我的翻转矩形边缘。
我的代码是这样的:
<Rectangle Margin="20,20,147,135" Fill="#FFCAD2DE" RenderOptions.EdgeMode="Unspecified">
<Rectangle.Effect>
<DropShadowEffect BlurRadius="4" ShadowDepth="2" Opacity=".5"/>
</Rectangle.Effect>
<Rectangle.RenderTransform>
<RotateTransform CenterX="0" CenterY="0" Angle="6" />
</Rectangle.RenderTransform>
</Rectangle>
我以编程方式缓慢改变角度...
但是结果在某些角度出现了别名,如下图(左侧)。我希望我的矩形边缘在所有角度都是完全光滑,如下图(右侧)。
EDIT1:
我使用 .NET 3.5
答案 0 :(得分:1)
以下步骤可以提供帮助
首先,我将项目从。NET 3.5 移至 .Net 4.5 ,而不做任何更改,结果是:
看起来像非常顺畅
Layout Rounding
:
What is
Layout Rounding
and how to use it in WPF 4当物体边缘落在像素设备的中间时, 独立于DPI的图形系统可以创建渲染工件,例如 作为模糊或半透明的边缘。
包含WPF的早期版本 像素捕捉以帮助处理这种情况。 Silverlight 2介绍 布局舍入,这是移动元素以使边缘的另一种方式 落在整个像素边界上。
WPF现在支持使用布局舍入
UseLayoutRounding
上的FrameworkElement
附加属性。画画 像素边界上的对象消除了半透明边缘 当边缘落在a的中间时,由抗锯齿产生 设备像素。使用布局舍入时,布局系统会创建 列或行测量中的小变化以避免子像素 渲染。
以下代码使用在单个像素宽度线上设置的 UseLayoutRounding
附加属性。您可以看到在缓慢调整窗口大小时布局舍入所产生的差异。
<StackPanel Width="150" Margin="7" Orientation="Horizontal">
<!-- Single pixel line with layout rounding turned OFF.-->
<Rectangle UseLayoutRounding="False" Width="45.6" Margin="10" Height="1" Fill="Red"/>
<!-- Single pixel line with layout rounding turned ON.-->
<Rectangle UseLayoutRounding="True" Width="45.6" Margin="10" Height="1" Fill="Red"/>
</StackPanel>
<强> SnapsToDevicePixels
强>
注意强>
您应该在根目录上将
UseLayoutRounding
设置为 true 元件即可。布局系统将子坐标添加到父级 坐标;因此,如果父坐标不在像素上 边界,子坐标也不在像素边界上。如果无法在根目录中设置
UseLayoutRounding
,请设置SnapsToDevicePixels
让孩子获得你想要的效果。
答案 1 :(得分:0)
看起来好像不可能:RotateTranform causes alias edges on border control or a Rectangle.
从那里:
幸运的是,在我的电脑上,25度旋转的边缘变得非常完美。如果您最终找到解决问题的方法,请与我们分享。对于有类似问题的其他社区成员来说,这将非常有益。