如何更改SDK v1.6提供的KinectSkeletonViewer中的骨架颜色

时间:2012-11-22 02:17:38

标签: kinect kinect-sdk

我想更改Kinect示例中提供的KinectSkeletonViewer控件。 我想暴露一个属性来改变骨架的颜色(跟踪骨骼)。

我需要做什么?

1 个答案:

答案 0 :(得分:0)

您需要修改两个文件 - KinectSkeleton.csKinectSkeletonViewer.xaml.cs。您正在KinectSkeleton上创建绑定,但由于此类未直接从查看器引用和调用,因此您还需要在KinectSkeletonViewer中创建直通绑定。

KinectSkeleton.cs - 创建DependencyProperties:

public static readonly DependencyProperty TrackedJointBrushProperty =
    DependencyProperty.Register(
        "TrackedJointBursh",
        typeof(Brush),
        typeof(KinectSkeleton),
        new FrameworkPropertyMetadata(new SolidColorBrush(Color.FromArgb(255, 68, 192, 68)), FrameworkPropertyMetadataOptions.AffectsRender));

public static readonly DependencyProperty TrackedBonePenProperty =
    DependencyProperty.Register(
        "TrackedBonePen",
        typeof(Pen),
        typeof(KinectSkeleton),
        new FrameworkPropertyMetadata(new Pen(Brushes.Green, TrackedBoneThickness), FrameworkPropertyMetadataOptions.AffectsRender));

KinectSkeletonViewer - 创建DependencyProperties

public static readonly DependencyProperty TrackedJointBrushProperty =
    DependencyProperty.Register(
        "TrackedJointBursh",
        typeof(Brush),
        typeof(KinectSkeletonViewer),
        new PropertyMetadata(new SolidColorBrush(Color.FromArgb(255, 68, 192, 68))));

public static readonly DependencyProperty TrackedBonePenProperty =
    DependencyProperty.Register(
        "TrackedBonePen",
        typeof(Pen),
        typeof(KinectSkeletonViewer),
        new PropertyMetadata(new Pen(Brushes.Green, TrackedBoneThickness)));

两个文件中定义相关属性:

public Brush TrackedJointBursh
{
    get { return (Brush)GetValue(TrackedJointBrushProperty); }
    set { SetValue(TrackedJointBrushProperty, value); }
}

public Pen TrackedBonePen
{
    get { return (Pen)GetValue(TrackedBonePenProperty); }
    set { SetValue(TrackedBonePenProperty, value); }
}

现在您要链接绑定。在 KinectSkeletonViewer 的<{1}}事件中 -

OnLoad

最后,您需要查看 KinectSkeleton.cs 并将硬编码颜色的引用替换为新属性。在上述示例的情况下,var trackedJointBrush = new Binding("TrackedJointBrush"); trackedJointBrush.Source = this; skeletonCanvas.SetBinding(KinectSkeleton.TrackedJointBrushProperty, trackedJointBrush); var trackedBonePen = new Binding("TrackedBonePen"); trackedBonePen.Source = this; skeletonCanvas.SetBinding(KinectSkeleton.TrackedBonePenProperty, trackedBonePen); trackedJointBrush替换为trackedBonePenTrackedJointBrush(注意案例)。然后,您可以注释掉硬编码变量。

当您在XAML中声明它时,您现在应该能够在TrackedBonePen中绑定这两个属性。

KinectSkeletonViewer类中定义了一些其他颜色。您可以使用与上面相同的概念来绑定它们。