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を使用せずに、任意の変換の下で図形をシームレスに並べて表示する他の方法はありますか?