Показать изображение с наложенным многоугольником - PullRequest
0 голосов
/ 13 февраля 2012

Это кажется простым, но это не работает для меня. Я хотел бы отобразить изображение из моей БД и наложить многоугольник из той же БД, используя ту же систему координат.

<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>

Я считаю, что мне нужно указать Rect для объекта ImageDrawing. Это прискорбно, потому что загружаемые изображения имеют разные размеры. Но если я не укажу Rect, изображение не появится при запуске приложения. Если я сделаю изображение достаточно большим (как в примере), оно появится, и его размер будет изменен в соответствии с моим контролем, но система координат многоугольника, похоже, не будет совпадать.

Кроме того, я использовал StringFormat, чтобы поставить M перед спецификацией Geometry, чтобы получилось так: «M50,50,12,50,30,30,30,100,100,100». Если я укажу это явно, появится многоугольник, но если я свяжу его с той же строкой, многоугольник не появится.

Не уверен, если эти две проблемы связаны друг с другом - мне придется пересмотреть, когда одна из двух будет исправлена. Спасибо за любые рекомендации, которые вы можете предложить!

1 Ответ

2 голосов
/ 13 февраля 2012

Параметр привязки StringFormat здесь игнорируется, поскольку целевым типом привязки является не строка, а Geometry .

Строка, возвращаемая вашим свойством Coordinates, неявно преобразуется в геометрию, потому что геометрия имеет настройку атрибута [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>
...