【问题标题】:Display an Image with an overlaid polygon显示带有重叠多边形的图像
【发布时间】:2012-02-13 14:00:32
【问题描述】:

这看起来很简单,但它不适合我。我想显示我的数据库中的图像,并使用相同的坐标系覆盖同一数据库中的多边形。

<Image Name="imgColl" Stretch="Fill" MaxWidth="190" MinHeight="70">
    <Image.Source>
        <DrawingImage>
            <DrawingImage.Drawing>
                <DrawingGroup>
                    <ImageDrawing ImageSource="{Binding ImageData}" Rect="0,0,590,590"/>
                    <GeometryDrawing Geometry="{Binding Coordinates, StringFormat=M\{0\}}">
                        <GeometryDrawing.Pen>
                            <Pen Thickness="4" LineJoin="Bevel" Brush="OrangeRed"/>
                        </GeometryDrawing.Pen>
                    </GeometryDrawing>
                </DrawingGroup>
            </DrawingImage.Drawing>
        </DrawingImage>
    </Image.Source>
</Image>

我发现我必须在 ImageDrawing 对象上指定 Rect。这很不幸,因为我正在加载的图像大小不同。但如果我不指定 Rect,则在运行应用程序时不会出现图像。如果我使图像足够大(如示例中所示),图像确实会出现,并且会调整大小以适合我的控件,但多边形坐标系似乎不匹配。

另外,我使用 StringFormat 将 M 放在几何规范的前面,这样它就变成了这样:“M50,50,12,50,30,30,30,100,100,100”。如果我明确指定,多边形就会出现,但如果我用相同的字符串绑定它,多边形就不会出现。

不确定这两个问题是否相互关联——当这两个问题中的任何一个得到修复时,我将不得不重新评估。感谢您提供的任何指导!

【问题讨论】:

  • 不得不承认你把我的英语测试到了极限:o) 可以附上一些图片,我们可以看到你得到了什么以及你想要什么?

标签: wpf geometrydrawing


【解决方案1】:

这里忽略了绑定的StringFormat设置,因为绑定的目标类型不是字符串,而是Geometry

Coordinates 属性返回的字符串被隐式转换为 Geometry,因为 Geometry 具有 [TypeConverterAttribute(typeof(GeometryConverter))] 属性设置,但不会应用 StringFormat 。您需要添加绑定Converter

关于ImageDrawing.Rect的另一个问题:据我了解ImageDrawing,你总是必须指定绘图矩形,默认是Rect.Empty。也许您还可以将Rect 属性绑定到数据对象的某些属性。

不管怎样,为了保持图像和多边形的共同坐标系,定义这样的东西不是更简单吗?

<Viewbox MaxWidth="190" MinHeight="70">
    <Canvas>
        <Image Stretch="None" Source="{Binding ImageData}" />
        <Path Stroke="OrangeRed" StrokeThickness="4" StrokeLineJoin="Bevel"
              Data="{Binding Coordinates}" />
    </Canvas>
</Viewbox>

【讨论】:

  • 您应该使用GeometryConverter 类使您的IValueConverter 直接从您的坐标字符串转换为几何图形。
  • 正在尝试 但它只支持一个子项,所以我不能将图像和路径都放在标签内。
  • 谢谢克莱门斯,这是一个很好的答案。我所做的唯一更改是我将其切换为使用 而不是 因为这允许我在 Points 属性上使用直接绑定,而不必在 Data 属性前添加“M” . [还请注意,它是 而不是 ]
  • 感谢您指出这一点。我不应该再发布任何未经测试的东西,总是给我带来麻烦:-)我会编辑我的答案。
  • Jarvis,更好的是使用 Canvas 而不是 Grid。这样可以避免您指定顶部/左侧对齐方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-31
  • 2023-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
相关资源
最近更新 更多