private void btn_Start_Click(object sender, EventArgs e) { Color[] cluster = new Color[Colors.Count]; for (int i = 0; i < cluster.Length; i++) { cluster[i] = Colors[i].ToColor(); } Algorithm.ML.KMeans.BitmapClustering means = new Algorithm.ML.KMeans.BitmapClustering(cluster); Algorithm.ML.KMeans.ProgressState pr = new Algorithm.ML.KMeans.ProgressState(); Task t = Task.Run(() => { means.Teach((Bitmap)pb_Source.Image, ref pr); Bitmap image = means.Compute((Bitmap)pb_Source.Image); this.Invoke((Action)(() => { pb_Cluster.Image = image; })); } ); while (t.IsCompleted == false) { if (ob_Progress.Value < ob_Progress.Maximum) { ob_Progress.Value++; } else { ob_Progress.Value = 0; } Application.DoEvents(); } for (int i = 0; i < means.Clusters.Length; i++) { ColorBuffer buffer = new ColorBuffer(); buffer.FromColor(means.Clusters[i]); Colors[i] = buffer; lb_Color.Items[i] = buffer; } ob_Progress.Value = 0; }
private void btn_FromImageColor_Click(object sender, EventArgs e) { Random rnd = new Random(); Bitmap source = (Bitmap)pb_Source.Image; int x = rnd.Next(0, source.Width); int y = rnd.Next(0, source.Height); Color color = source.GetPixel(x, y); ColorBuffer buffer = new ColorBuffer(); buffer.FromColor(color); Colors.Add(buffer); lb_Color.Items.Add(buffer); if (lb_Color.Items.Count > 0 && pb_Source.Image != null) { btn_Start.Enabled = true; } else { btn_Start.Enabled = false; } }