【发布时间】:2009-06-07 13:17:05
【问题描述】:
我想在 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,则 Rectangle 可以无缝地组合在一起。当它为 0.5 时,它们之间有一条深灰色的条纹。我明白为什么 - 组合的半透明边缘像素不会组合成 100% 不透明。但我想要一种方法来解决它。
我总是可以让矩形重叠,但我不会总是提前知道它们会采用什么模式(这是针对最终将支持地图编辑器的游戏)。此外,当事物以 in 方式放大时,这会导致重叠区域周围出现伪影(除非我在重叠部分做了斜切角,这是一项非常繁重的工作,并且仍然会在拐角处引起问题)。
有什么方法可以将这些矩形组合成一个组合的“形状”,可以在没有内部间隙的情况下呈现?我玩过 GeometryDrawing,它确实可以做到这一点,但是我看不到用不同颜色的画笔绘制每个 RectangleGeometry 的方法。
有没有其他方法可以让形状在任意变换下无缝平铺,而无需借助 SnapsToDevicePixels?
【问题讨论】:
-
因为我遇到了完全相同的问题,所以想问一下您是否找到了解决方案。
标签: wpf tiles tesselation