C#WPF形状旋转锯齿状边缘

时间:2019-02-28 13:20:58

标签: c# wpf rotation blurry

我正在使用WPF开发软件,当我绘制一个简单的形状并将其旋转大约45英尺时,会出现锯齿状的边缘。抗锯齿不是解决方案,因为边缘模糊,对角线根本无法按我的意愿工作。 UseLayoutRounding和SnapsToDevicePixels没有帮助,因为我认为它与线条绘制算法有关。我在WinForms上尝试了相同的方法,但得到了更好的结果,但是我想坚持使用WPF,因为我已经在使用它的某些功能。

代码看起来像这样:

  1. 创建形状-> Shape = new Polygon();
  2. 在画布上添加形状-> DrawingLayer.Children.Add(Shape);
  3. 旋转形状-> RotateTransform rt = new RotateTransform(Angle,Centroid.X,Centroid.Y);
  4. 更新形状-> Shape.RenderTransform = rt;

WPF轮播:
WPF rotation

WinForms旋转:
WinForms rotation

使用抗锯齿的WPF旋转:
WPF rotation with Antialiasing

1 个答案:

答案 0 :(得分:0)

如果没有看到您的实际代码/标记就很难发表评论,但是有了这个标记...

<Window x:Class="StackOverflow.Question54926730"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="StackOverflow 54926730" SizeToContent="WidthAndHeight">
    <Canvas Height="400" Width="400">
        <Polygon Canvas.Left="100" Canvas.Top="100" Stroke="Black" StrokeThickness="1">
            <Polygon.Points>
                <Point X="0"   Y="0" />
                <Point X="200" Y="0" />
                <Point X="200" Y="200" />
                <Point X="0"   Y="200" />
            </Polygon.Points>
            <Polygon.RenderTransform>
                <RotateTransform Angle="45" CenterX="100" CenterY="100" />
            </Polygon.RenderTransform>
        </Polygon>
    </Canvas>
</Window>

...结果对我来说很好...

WPF RotationTransform rotating a Polygon square by 45 degrees

我注意到您说您正在“绕着” 45度旋转,并且再次看到任何代码都不清楚(44.95度还是40度?)是什么意思,但是在这两个角度都看起来不错。这是一个不太圆的41.3579度角:

WPF RotationTransform rotating a Polygon square by 41.3579 degrees

只有在90度±10的倍数上,我才开始看到明显的阶梯效应。这是9度:

WPF RotationTransform rotating a Polygon square by 5 degrees

相关版本号:

  • 64位Windows 10 Pro 1809 v17763.437
  • Visual Studio社区2019 v16.0.1
  • .NET Framework v4.7.2
  • PresentationCore.dll v4.7.3362.0
  • PresentationFramework.dll v4.7.3362.0