Я хочу бесшовно нарисовать кучу разноцветных прямоугольников в WPF. То есть, я хочу поместить кучу прямоугольников от края до края и не иметь промежутков между ними.Плитка прямоугольников в WPF
Если все выровнено по пикселям, это отлично работает. Но я также хочу поддерживать произвольное масштабирование, и в идеале я не хочу использовать SnapsToDevicePixels (потому что это ухудшит качество, когда изображение будет увеличено). Но это означает, что мои Rectangles иногда визуализируются с пробелами. Например:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="Black">
<Canvas SnapsToDevicePixels="False">
<Canvas.RenderTransform>
<ScaleTransform ScaleX="0.5" ScaleY="0.5"/>
</Canvas.RenderTransform>
<Rectangle Canvas.Left="25" Width="100" Height="100" Fill="#CFC"/>
<Rectangle Canvas.Left="125" Width="100" Height="100" Fill="#CCF"/>
</Canvas>
</Page>
Если ScaleX в ScaleTransform является 1, то Прямоугольники совмещаются легко. Когда он равен 0,5, между ними есть темно-серая полоска. Я понимаю, почему - комбинированные полупрозрачные граничные пиксели не объединяются, чтобы быть непрозрачными на 100%. Но я хотел бы исправить это.
Я всегда мог бы просто совместить прямоугольники, но я не всегда буду знать, какие шаблоны они будут (это для игры, которая в конечном итоге будет поддерживать редактор карт). Кроме того, это может вызвать артефакты вокруг области перекрытия, когда вещи были увеличены до в (если бы я не подрезал углы на нижней части, что очень тяжело, и все еще вызывает проблемы в углах).
Есть ли способ объединить эти прямоугольники в единую комбинированную «форму», которая делает рендеринг без внутренних зазоров? Я играл с GeometryDrawing, что делает именно это, но тогда я не вижу способа рисовать каждую RectangleGeometry с помощью разноцветной кисти.
Есть ли какие-либо другие способы получить фигуры, чтобы плавно перемещаться под произвольным преобразованием, не прибегая к SnapsToDevicePixels?
Поскольку у меня есть та же проблема, я хотел спросить, нашли ли вы решение. – Jens