キャンバスを下に置き、その上に画像を置き、次に次のように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
取得しました