C # WPF форма вращения неровных краев - PullRequest
0 голосов
/ 28 февраля 2019

Я занимаюсь разработкой программного обеспечения с использованием 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 голосов
/ 18 апреля 2019

Трудно комментировать, не видя вашего фактического кода / разметки, но с этой разметкой ...

<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 Community 2019 v16.0.1
  • .NET Framework v4.7.2
  • PresentationCore.dll v4.7.3362.0
  • PresentationFramework.dll v4.7.3362.0
...