Я хочу плавно разложить несколько прямоугольников разного цвета в WPF. То есть я хочу поместить прямоугольники в ряд, чтобы между ними не было пробелов.
Если все выровнено по пикселям, это нормально работает. Но я также хочу поддерживать произвольное масштабирование, и в идеале я не хочу использовать SnapsToDevicePixels (потому что это ухудшит качество, когда изображение будет уменьшено). Но это означает, что мои прямоугольники иногда отображаются с пробелами. Например:
<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>
Если ScaleTransform ScaleX равен 1, то прямоугольники соединяются без проблем. Когда это 0,5, между ними появляется темно-серая полоса. Я понимаю, почему - комбинированные полупрозрачные краевые пиксели не могут быть непрозрачными на 100%. Но я бы хотел, чтобы это исправить.
Я всегда мог просто наложить прямоугольники, но я не всегда буду заранее знать, в каких шаблонах они будут (это для игры, которая в конечном итоге будет поддерживать редактор карт). Кроме того, это может привести к появлению артефактов вокруг области перекрытия при увеличении масштаба изображения в (если только я не делал углы наклона на перекрывающейся части, что является ужасной работой и по-прежнему вызывает проблемы на углах) .
Есть ли какой-нибудь способ, которым я могу объединить эти прямоугольники в одну объединенную "фигуру", которая рендерится без внутренних пробелов? Я поиграл с GeometryDrawing, которая делает именно это, но потом я не вижу способа рисовать каждую RectangleGeometry кистью разного цвета.
Существуют ли другие способы беспрепятственного размещения фигур при произвольном преобразовании, не прибегая к SnapsToDevicePixels?