代码之家  ›  专栏  ›  技术社区  ›  Yuval Peled

在图像上绘制覆盖图

  •  4
  • Yuval Peled  · 技术社区  · 16 年前

    我有一个用户可以缩放/滚动的图像。 我想在不同的图层上绘制一些矩形/圆形(例如:为图片中标识的每个人的脸绘制一个圆形)。

    矩形位置相对于图像。

    如何创建这样的覆盖?

    2 回复  |  直到 12 年前
        1
  •  5
  •   idursun    16 年前

    我也做了类似的事情:

    • 将图像设置为背景
    • 把透明的 ItemsControl 在它上面
    • 集合 ItemsControl.ItemsPanel Canvas
    • 为拖动操作编写处理程序

    代码片段:

      <ItemsControl x:Name="overlayItemsControl" 
            Background="Transparent"  
            ItemsSource="{Binding Path=Blocks}"
            Width="{Binding ElementName=imageControl, Path=Width}"
            Height="{Binding ElementName=imageControl, Path=Height}"
            ItemContainerStyle="{StaticResource rectStyle}"
            PreviewMouseMove="ItemsControl_PreviewMouseMove"
            PreviewMouseDown="ItemsControl_PreviewMouseDown"
            PreviewMouseUp="ItemsControl_PreviewMouseUp"
            PreviewKeyDown="ItemsControl_PreviewKeyDown">
    
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <Canvas IsItemsHost="True" />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
       ....
    </ItemsControl>
    
        2
  •  6
  •   Rob    15 年前

    一个简单的方法是使用画布并将画布的background属性设置为照片,然后将圆形或矩形放置在画布的顶部,并将它们与canvas.left和.top属性一起放置。

        <Canvas x:Name="myCanvas">
            <Canvas.Background>
                <ImageBrush ImageSource="c:\photo.bmp"/>
            </Canvas.Background>
            <Image Canvas.Top="20" Canvas.Left="20" Height="20" Width="20" Source="c:\circle.bmp"/>
        </Canvas>