0

長方形を画像に描画しようとしています:

<Canvas>
    <Image>
        <Image.Source>
            <DrawingImage>
                <DrawingImage.Drawing>
                    <DrawingGroup x:Name="_drawingGroup" />
                </DrawingImage.Drawing>
            </DrawingImage>
        </Image.Source>
    </Image>
</Canvas>

C# コードは次のようになります。

DrawingVisual visual = new DrawingVisual();
using (DrawingContext dc = visual.RenderOpen())
{
    Rect rect = new Rect(new Point(100, 100), new Size(200, 100));
    dc.DrawRectangle(Brushes.Blue, null, rect);
}

this._drawingGroup.Children.Add(visual.Drawing);
this._drawingGroup.Freeze();

ご覧のとおり、左上隅 (100,100) の長方形を描くつもりです。しかし、期待どおりに動作しません。常に (0,0) に描画されます。私がどうかしましたか、まずいことでもありましたか?

4

1 に答える 1

0

DrawingImage は、DrawingDrawingの表示に合わせて配置されますBounds

回避策として、原点が (0, 0) の透明な長方形を追加するだけです。Drawing を作成するために DrawingVisual は必要ないことにも注意してください。

drawingGroup.Children.Add(new GeometryDrawing(
    Brushes.Transparent, null,
    new RectangleGeometry(new Rect(0, 0, 1, 1))));

drawingGroup.Children.Add(new GeometryDrawing(
    Brushes.Blue, null,
    new RectangleGeometry(new Rect(100, 100, 200, 100))));

drawingGroup.Freeze();

DrawingImage を使用した Image コントロールの代わりに、DrawingBrush を使用した (十分な大きさの) Rectangle を使用できます。

<Rectangle Width="10000" Height="10000">
    <Rectangle.Fill>
        <DrawingBrush ViewboxUnits="Absolute" Viewbox="0,0,10000,10000">
            <DrawingBrush.Drawing>
                <DrawingGroup x:Name="drawingGroup" />
            </DrawingBrush.Drawing>
        </DrawingBrush>
    </Rectangle.Fill>
</Rectangle>

これで、意図したとおりに図面を作成できます。

drawingGroup.Children.Add(new GeometryDrawing(
    Brushes.Blue, null,
    new RectangleGeometry(new Rect(100, 100, 200, 100))));

drawingGroup.Freeze();
于 2016-03-30T06:37:53.803 に答える