C# WPF中的每像素蚂蚁选择边界
我发现了一些矩形行进蚂蚁的选择方法,主要是使用矩形,比如上面的这个。使用一个形状和故事板可以工作。问题是我使用缩放布局变换控制缩放,这也会改变形状边界的大小 但是,我希望能够创建每像素选择边界: 我目前的计划是存储一个位图,其中包含一个表示当前选定像素的位掩码,但是我必须使用类似于构建表示边框的复合图的方法来遍历其周长 不过,也许还有更好的办法 下面是一些假设的XAML,展示了我的计划:C# WPF中的每像素蚂蚁选择边界,c#,wpf,C#,Wpf,我发现了一些矩形行进蚂蚁的选择方法,主要是使用矩形,比如上面的这个。使用一个形状和故事板可以工作。问题是我使用缩放布局变换控制缩放,这也会改变形状边界的大小 但是,我希望能够创建每像素选择边界: 我目前的计划是存储一个位图,其中包含一个表示当前选定像素的位掩码,但是我必须使用类似于构建表示边框的复合图的方法来遍历其周长 不过,也许还有更好的办法 下面是一些假设的XAML,展示了我的计划: <ScrollViewer Name="PART_Workspace" Grid.Column="1
<ScrollViewer Name="PART_Workspace" Grid.Column="1"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto">
<Grid x:Name="PART_Grid" RenderTransformOrigin="0.5,0.5">
<Grid.LayoutTransform>
<TransformGroup>
<!-- This controls the zoom -->
<ScaleTransform x:Name="PART_ScaleTransform"/>
</TransformGroup>
</Grid.LayoutTransform>
<Canvas x:Name="PART_SelectionLayer">
<!-- THIS REGION TO BE GENERATED AT RUNTIME -->
<Path Style="{StaticResource SelectionBorder}"
StrokeThickness="! Possibly multiply this by inverse of zoom? !">
<Path.Data>
<PathGeometry> <!-- one border around a region --> </PathGeometry>
<!-- additional borders -->
</Path.Data>
</Path>
<!-- THIS REGION TO BE GENERATED RUNTIME -->
</Canvas>
<Viewbox Grid.Column="0" Grid.Row="0">
<!-- This displays the bitmap, which is updated elsewhere by code -->
<Image x:Name="PART_ImageCanvas" RenderOptions.BitmapScalingMode="NearestNeighbor"/>
</Viewbox>
</Grid>
</ScrollViewer>
如果您正在处理表示选择的位掩码,并且希望获得表示选择轮廓的一个像素边框,则可以使用方形形态学操作符来完成此操作。一旦你这样做了,你就掩盖了一个模式,并将其覆盖,以获得行进中蚂蚁的近似值 从二进制选择掩码开始,其中选择1,取消选择0: 使用3倍方形内核放大遮罩,并从放大图像中减去原始图像: 使用棋盘格图案遮罩轮廓,以获得行进中的蚂蚁: 将遮罩覆盖在原始图像上以获得整体效果。移动棋盘以获得“追逐”效果: 这可以在一个相当简单的紧循环中完成,唯一复杂的部分是膨胀,可以从org.net或OpenCV获得。每像素,循环最终执行以下操作:
if (dialated & !selected)
{
if (checkerboard)
{
pixel = red;
}
}
如果您已经有了轮廓路径,并且希望它与已缩放的图像匹配,我将以屏幕单位缩放轮廓。这样,
BorderThickness
和UseLayoutRounding
都将按预期工作。您能否给出一个简明的(xaml)示例,说明您试图添加选择边框的内容?(或者,如果您正在使用位图,是否正在处理表示选定像素的位掩码?)位掩码表示选定像素。也就是说,选定像素不符合任何控件。它们表示图像中的像素,由一个完全独立的数据结构决定,该数据结构不是WPF的一部分。无论如何,这是目前的想法。