4

1 ~ 4 の異なるスクリーン ポイント (最大 2 人の左手/右手) を生成できる Kinect アプリケーションがあり、それぞれPointをマルチ タッチ メッセージとしてフォーカスしてアプリケーションに送信できるようにしたいと考えています。

SendInput現在、マウスの移動、マウスダウン、マウスアップのメッセージを送信するために使用していますが、私の知る限り、WM_TOUCHメッセージはサポートされていません。

C# でマルチタッチ メッセージを送信する簡単な方法を知っている人はいますか? テストとして、MS ペイントで Kinect を使用して、両手でペイントできるようにしたいと思います (風のすべての色と同様)。

4

2 に答える 2

5

必要なのは、問題のウィンドウにメッセージを送信することです。作成する必要があるメッセージはWM_TOUCHメッセージです。WM_TOUCH ここ で非常に役立つディスカッション スレッドを見つけることができます。

お役に立てれば!

于 2012-07-13T15:04:03.490 に答える
0

image1キャンバスを下に置き、その上に画像を置き、次に次のように4つの楕円を配置して、各人の手のxとyの座標を保存することで何かを行わない限り、これは機能しないと思います。人々の関節に対するそれらの位置(これを行う方法については、チャネル9を参照してください)。次に、座標をにコピーしてdouble、それらのピクセルを設定します。このようにしてください。

double person1hand1x = Canvas.GetLeft(person1hand1);
double person1hand1y =  Canvas.GetTop(person1hand1);

次に、Imageコントロールを使用して、これらのアクションに基づいてキャンバスの色を変更します。リソースをプロジェクトにインポートSystem.Drawingします。ピクセルを設定するために必要になります。次に、を作成しBitmap、xとyがあった場所としてそのピクセルを設定します。このようにしてください:

        Bitmap b = new Bitmap((int)image1.Width, (int)image1.Height); //set the max height and width

        b.SetPixel(person1hand1x, person1hand1y, person1hand1.Fill); //set the ellipse fill so they can keep track of who drew what


        image1.Source = ToBitmapSource(b); //convert to bitmap source... see https://stackoverflow.com/questions/94456/load-a-wpf-bitmapimage-from-a-system-drawing-bitmap/1470182#1470182 for more details
    }


    /// <summary>
    /// Converts a <see cref="System.Drawing.Bitmap"/> into a WPF <see cref="BitmapSource"/>.
    /// </summary>
    /// <remarks>Uses GDI to do the conversion. Hence the call to the marshalled DeleteObject.
    /// </remarks>
    /// <param name="source">The source bitmap.</param>
    /// <returns>A BitmapSource</returns>
    public static BitmapSource ToBitmapSource(this System.Drawing.Bitmap source)
    {
        BitmapSource bitSrc = null;

        var hBitmap = source.GetHbitmap();

        try
        {
            bitSrc = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                hBitmap,
                IntPtr.Zero,
                Int32Rect.Empty,
                BitmapSizeOptions.FromEmptyOptions());
        }
        catch (Win32Exception)
        {
            bitSrc = null;
        }
        finally
        {
            NativeMethods.DeleteObject(hBitmap);
        }

        return bitSrc;
    }

    internal static class NativeMethods
    {
        [DllImport("gdi32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        internal static extern bool DeleteObject(IntPtr hObject);
    }

お役に立てれば!注:System.Drawing.BitmapからWPFBitmapImageを読み込むからToBitmapSource取得しました

于 2012-07-13T14:38:44.387 に答える