/// <summary> /// Initialize control values /// </summary> private void InitialSettings() { if (FilterSettings == null) FilterSettings = new ColorFilter(); pnlBorderColor.BackColor = FilterSettings.BorderColor; numMinHeight.Value = FilterSettings.MinHeight; numMinWidth.Value = FilterSettings.MinWidth; trackMinRed.Value = FilterSettings.Red.Min; trackMaxRed.Value = FilterSettings.Red.Max; trackMinGreen.Value = FilterSettings.Green.Min; trackMaxGreen.Value = FilterSettings.Green.Max; trackMinBlue.Value = FilterSettings.Blue.Min; trackMaxBlue.Value = FilterSettings.Blue.Max; txtMinRed.Text = FilterSettings.Red.Min.ToString(); txtMaxRed.Text = FilterSettings.Red.Max.ToString(); txtMinGreen.Text = FilterSettings.Green.Min.ToString(); txtMaxGreen.Text = FilterSettings.Green.Max.ToString(); txtMinBlue.Text = FilterSettings.Blue.Min.ToString(); txtMaxBlue.Text = FilterSettings.Blue.Max.ToString(); SetEventHandlers(); }
/// <summary> /// Find the objects in the image. /// </summary> /// <param name="image">The image to search for objects</param> /// <param name="filter">The filter with color</param> public void FindObjectsOfImage(System.Drawing.Image image, ColorFilter filter) { foreach (Rectangle item in this.GetObjectsCoordinates(image, filter)) { Rectangle coord = new Rectangle(); if (HasParentBlock(Squares, item, out coord)) { facelets.Add(coord, filter.BorderColor); } } }
/// <summary> /// Add a new ColorFilter object /// </summary> /// <param name="filter"></param> public void Add(ColorFilter filter) { try { int index = this.GetFilterIndex(filter.FilterID); List[index] = filter; } catch { List.Add(filter); } }
/// <summary> /// Get the especific ColorFilter /// </summary> /// <param name="FilterID">string with the filter ID</param> /// <returns>Return, if found, the ColorFilter.</returns> public ColorFilter GetFilter(string FilterID) { ColorFilter filter = new ColorFilter(); bool found = false; int i = 0; if (List.Count > 0) { while (!found && i < List.Count) { filter = (ColorFilter)List[i]; found = filter.FilterID.Equals(FilterID); i++; } } if (!found) throw new InvalidOperationException("ColorFilter not found"); return filter; }
/// <summary> /// Translate a ColorFilter objet to XML. /// </summary> /// <param name="filter">ColorFilter to translate</param> /// <param name="xmlDoc">XmlDocument to append</param> /// <returns>Return the XmlElement with the ColorFilter translated</returns> private XmlElement TranslateToXML(ColorFilter filter, XmlDocument xmlDoc) { XmlElement element = xmlDoc.CreateElement("filter"); element.SetAttribute("filterID", filter.FilterID); element.SetAttribute("minWidth", filter.MinWidth.ToString()); element.SetAttribute("minHeight", filter.MinHeight.ToString()); element.SetAttribute("borderColor", filter.BorderColor.ToArgb().ToString()); XmlElement redEl = xmlDoc.CreateElement("red"); redEl.SetAttribute("min", filter.Red.Min.ToString()); redEl.SetAttribute("max", filter.Red.Max.ToString()); XmlElement greenEl = xmlDoc.CreateElement("green"); greenEl.SetAttribute("min", filter.Green.Min.ToString()); greenEl.SetAttribute("max", filter.Green.Max.ToString()); XmlElement blueEl = xmlDoc.CreateElement("blue"); blueEl.SetAttribute("min", filter.Blue.Min.ToString()); blueEl.SetAttribute("max", filter.Blue.Max.ToString()); element.AppendChild(redEl); element.AppendChild(greenEl); element.AppendChild(blueEl); return element; }
/// <summary> /// Translate a XmlNode into a ColorFilter object. /// </summary> /// <param name="element">XmlNode with the ColorFilter</param> /// <returns>Return the ColorFilter.</returns> private ColorFilter TranslateFromXML(XmlNode element) { ColorFilter filter = new ColorFilter(); filter.FilterID = element.Attributes["filterID"].Value; filter.MinWidth = Int16.Parse(element.Attributes["minWidth"].Value); filter.MinHeight = Int16.Parse(element.Attributes["minHeight"].Value); filter.BorderColor = System.Drawing.Color.FromArgb(Int32.Parse(element.Attributes["borderColor"].Value)); XmlNode redNode = element.ChildNodes[0]; XmlNode greenNode = element.ChildNodes[1]; XmlNode blueNode = element.ChildNodes[2]; filter.Red.Min = Int32.Parse(redNode.Attributes["min"].Value); filter.Red.Max = Int32.Parse(redNode.Attributes["max"].Value); filter.Green.Min = Int32.Parse(greenNode.Attributes["min"].Value); filter.Green.Max = Int32.Parse(greenNode.Attributes["max"].Value); filter.Blue.Min = Int32.Parse(blueNode.Attributes["min"].Value); filter.Blue.Max = Int32.Parse(blueNode.Attributes["max"].Value); return filter; }
/// <summary> /// Adds a filter to the collection /// </summary> /// <param name="filter">The filter to be added</param> public static void AddFilter(ColorFilter filter) { colorFilterCol.Add(filter); }
/// <summary> /// Links the picturebox objects to the respectives color filters /// </summary> private void LinkPictureToFilter() { foreach (Control item in groupImgProc.Controls) { if (item is PictureBox) { ColorFilter newFilter = new ColorFilter(); newFilter.FilterID = item.Name; if (item.Name.Contains("Red")) newFilter.BorderColor = Color.Red; else if (item.Name.Contains("Blue")) newFilter.BorderColor = Color.Blue; else if (item.Name.Contains("Green")) newFilter.BorderColor = Color.Green; else if (item.Name.Contains("Yellow")) newFilter.BorderColor = Color.Yellow; else if (item.Name.Contains("Orange")) newFilter.BorderColor = Color.Orange; else newFilter.BorderColor = Color.White; StoredData.AddFilter(newFilter); } } }
/// <summary> /// Finds the objects of the image /// </summary> /// <param name="image">The image to look for objects</param> /// <param name="filter">The filter with the minHeight and minWidth</param> private void FindObjectsOfImage(Image image, ColorFilter filter) { ImageAnalyser analyser = new ImageAnalyser(); Graphics g = Graphics.FromImage(picbVideoCapture.Image); List<Rectangle> blocks = analyser.GetSquares(CubeAnalyser.SourceImage, (int)numMinWidth.Value, (int)numMinHeight.Value); FindObjectsOfImage(image, filter, blocks, g, analyser); }
/// <summary> /// Find the objects in the image. /// </summary> /// <param name="image">The image to search for objects</param> /// <param name="filter">The filter with color</param> /// <param name="g">The Graphics to draw the rectangles</param> /// <param name="analyser">The ImageAnalyser to analysis the image</param> private void FindObjectsOfImage(Image image, ColorFilter filter, List<Rectangle> blocksFace, Graphics g, ImageAnalyser analyser) { Pen p = new Pen(filter.BorderColor, 3.0F); foreach (Rectangle item in analyser.GetObjectsCoordinates(image, filter)) { VisualCubeBlock newFacelet = new VisualCubeBlock(); newFacelet.Color = ColorTranslate.getFaceColorByColor(p.Color); Rectangle coord = new Rectangle(); if (HasParentBlock(blocksFace, item, out coord)) { newFacelet.Rectangle = coord; this.CurrentFace.AddBlock(newFacelet.Clone(), true); g.DrawRectangle(p, coord); } newFacelet.Dispose(); } }
/// <summary> /// Apply color filter in image. /// </summary> /// <param name="filter">ColorFilter object with the RGB weightining</param> /// <param name="img">Image to filter</param> /// <returns>Return a Bitmap object with the image filtered</returns> public Bitmap ApplyColorFilter(ColorFilter filter, System.Drawing.Image img) { Bitmap filteredImg = new Bitmap((System.Drawing.Image)img.Clone()); filter.ApplyInPlace(filteredImg); return filteredImg; }
/// <summary> /// Get rectangles objects in the image /// </summary> /// <param name="image">Image to get the rectangles</param> /// <param name="filter">ColorFilter with the minimum height and minimum width</param> /// <returns>Return a rectangle array with the object coordinates</returns> public Rectangle[] GetObjectsCoordinates(System.Drawing.Image image, ColorFilter filter) { return GetObjectsCoordinates(image, filter.MinWidth, filter.MinHeight); }
public void FindObjectsOfImage(System.Drawing.Image image, ColorFilter filter, ref Dictionary<Rectangle, Color> dictio) { foreach (Rectangle item in this.GetObjectsCoordinates(image, filter)) { Rectangle coord = new Rectangle(); if (HasParentBlock(Squares, item, out coord)) { if (dictio.ContainsKey(coord)) { dictio[coord] = filter.BorderColor; } else { dictio.Add(coord, filter.BorderColor); } } } }