1

WPFユーザーコントロールで、位置とサイズが異なる可能性のある円で画像コントロールをマスクしようとしています。ユーザーは、左にドラッグして円の半径を変更し、右にドラッグして楕円の中心点を変更します。必要なすべての値を正しくキャプチャしており、マスクの半径を適切に設定できます。問題は、楕円の中心にどのポイントを使用しても、画像コントロールの中心から描画されることです。何か案は?

以下は、マスクを設定するコードです。

private void SetMask(double _Radius)
{
        EllipseGeometry MaskGeometry = new EllipseGeometry(CenterPos, _Radius, _Radius);
        GeometryDrawing MaskDrawing = new GeometryDrawing(Brushes.Black, null, MaskGeometry);
        DrawingBrush MaskBrush = new DrawingBrush(MaskDrawing);
        MaskBrush.Stretch = Stretch.None;
        Img.OpacityMask = MaskBrush;  //Img is the Image control
}
4

2 に答える 2

3

また、 ViewboxUnitsAlignmentX、およびAlignmentYプロパティを設定する必要があります。

private void SetMask(double radius)
{
    var maskGeometry = new EllipseGeometry(CenterPos, radius, radius);
    var maskDrawing = new GeometryDrawing(Brushes.Black, null, maskGeometry);
    var maskBrush = new DrawingBrush
    {
        Drawing = maskDrawing,
        Stretch = Stretch.None,
        ViewboxUnits = BrushMappingMode.Absolute,
        AlignmentX = AlignmentX.Left,
        AlignmentY = AlignmentY.Top
    };

    Img.OpacityMask = maskBrush;
}
于 2013-01-11T18:36:06.480 に答える
0

DrawingBrushベースタイルのViewportプロパティとViewportUnitsプロパティ変更する必要があります。

private void button1_Click(object sender, RoutedEventArgs e)
    {
        EllipseGeometry MaskGeometry = new EllipseGeometry(CenterPos, _RadiusX, _RadiusY);
        GeometryDrawing MaskDrawing = new GeometryDrawing(Brushes.Black, null, MaskGeometry);
        DrawingBrush MaskBrush = new DrawingBrush(MaskDrawing);
        MaskBrush.Stretch = Stretch.None;
        MaskBrush.ViewportUnits = BrushMappingMode.Absolute;
        MaskBrush.Viewport = MaskGeometry.Bounds;
        Img.OpacityMask = MaskBrush;  //Img is the Image control

    }

こちらのMSDNドキュメントには、TileBrushを使用してコントロールをペイントする方法が詳しく説明されています。

于 2013-01-11T18:43:09.617 に答える