我有一个 Kinect 应用程序,我可以生成 1-4 个不同的屏幕点(左/右手最多 2 人),我希望能够将每个Point
点作为多点触控消息发送到应用程序。
我目前正在使用SendInput
发送鼠标移动、鼠标按下和鼠标向上消息,但是 AFAIK,它不支持这些WM_TOUCH
消息。
有谁知道在 C# 中发送多点触控消息的简单方法?作为测试,我希望能够在 MS Paint 中使用 Kinect,并用双手绘画(以及风的所有颜色)
我有一个 Kinect 应用程序,我可以生成 1-4 个不同的屏幕点(左/右手最多 2 人),我希望能够将每个Point
点作为多点触控消息发送到应用程序。
我目前正在使用SendInput
发送鼠标移动、鼠标按下和鼠标向上消息,但是 AFAIK,它不支持这些WM_TOUCH
消息。
有谁知道在 C# 中发送多点触控消息的简单方法?作为测试,我希望能够在 MS Paint 中使用 Kinect,并用双手绘画(以及风的所有颜色)
我认为这行不通,除非您通过将画布放下,然后在其上放置图像,然后是 4 个椭圆,例如:,然后缩放来保存每个人手的 x 和 y 坐标。它们与人们关节的位置,(有关如何执行此操作,请参见第 9 频道)。然后我会将坐标复制到 adouble
然后设置它们的像素。这样做。
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);
}
希望这可以帮助!注意:我ToBitmapSource
从Load a WPF BitmapImage from a System.Drawing.Bitmap得到