在图像上绘制叠加层

Yuv*_*led 4 c# wpf xaml drawing overlay

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

矩形位置相对于图像.

如何创建这样的叠加层?

小智 6

一种简单的方法是只使用Canvas并将canvas的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>
Run Code Online (Sandbox Code Playgroud)


idu*_*sun 5

我设法做了类似的事情:

  • 设置图像作为背景
  • ItemsControl在它上面放一个透明的
  • 设置ItemsControl.ItemsPanelCanvas
  • 为拖动操作编写处理程序

代码片段:

  <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>
Run Code Online (Sandbox Code Playgroud)