ICanvasImage GetMagicWandMask(List<Vector2> points, float zoomFactor)
{
// What color did the user click on?
Vector2 clickPoint = Vector2.Clamp(points.First(), Vector2.Zero, SourceBitmap.Size.ToVector2() - Vector2.One);
Color clickColor = SourceBitmap.GetPixelColors((int)clickPoint.X, (int)clickPoint.Y, 1, 1).Single();
// How far they have dragged = selection tolerance.
float dragDistance = Vector2.Distance(points.First(), points.Last());
float chromaTolerance = Math.Min(dragDistance / 512 * zoomFactor, 1);
return new ColorMatrixEffect
{
Source = new ChromaKeyEffect
{
Source = SourceBitmap,
Color = clickColor,
Tolerance = chromaTolerance,
InvertAlpha = true
},
ColorMatrix = new Matrix5x4
{
// Preserve alpha.
M44 = 1,
// Set RGB = white.
M51 = 1,
M52 = 1,
M53 = 1,
}
};
}