private int CompareByClusterColor(PaletteItem x, PaletteItem y) { if (this.clusters == null) { return(PaletteSortContext.CompareByTitle(x, y)); } ClusteringPoint px = this.colorBase; if (this.clusters.ContainsKey(x.Cluster)) { px = PaletteSortContext.ToPoint(this.clusters[x.Cluster].Colors); } ClusteringPoint py = this.colorBase; if (this.clusters.ContainsKey(y.Cluster)) { py = PaletteSortContext.ToPoint(this.clusters[y.Cluster].Colors); } double dx = this.colorBase.Distance(px); double dy = this.colorBase.Distance(py); int r = dx.CompareTo(dy); if (r == 0) { r = PaletteSortContext.CompareByTitle(x, y); } return(r); }
PaletteSortContext(Color baseColor, SortedDictionary <int, PaletteItem> clusters) { this.clusters = clusters; this.colorBase = PaletteSortContext.ToPoint(new Color[8] { Color.Black, Color.Black, Color.Black, Color.Black, Color.Black, Color.Black, Color.Black, Color.Black }); }
private int CompareByPaletteColor(PaletteItem x, PaletteItem y) { ClusteringPoint px = PaletteSortContext.ToPoint(x.Colors); ClusteringPoint py = PaletteSortContext.ToPoint(y.Colors); double dx = this.colorBase.Distance(px); double dy = this.colorBase.Distance(py); int r = dx.CompareTo(dy); if (r == 0) { r = PaletteSortContext.CompareByTitle(x, y); } return(r); }
private static ClusteringPoint ToPoint(Color[] colors) { ClusteringPoint cp = new ClusteringPoint(24); int i = 0; for (int j = 0; j < colors.Length; j++) { LabColor lc = ColorTransform.RgbToLab(colors[j]); cp[i++] = lc.L; cp[i++] = lc.A; cp[i++] = lc.B; if (i >= cp.Size) { break; } } return(cp); }
public void UpdatePaletteClusters(ClusteringPoint[] clusters, ClusteringPoint[] points) { if (clusters == null) { return; } using (SqlConnection conn = this.GetConnection()) { SqlCommand cmd = new SqlCommand(@"DELETE FROM PALETTE_COLOR WHERE PALETTE_ID < 0", conn); cmd.ExecuteNonQuery(); cmd = null; cmd = new SqlCommand(@"UPDATE PALETTE SET CLUSTER = NULL", conn); cmd.ExecuteNonQuery(); cmd = null; for (int i = 0; i < clusters.Length; i++) { ClusteringPoint p = clusters[i]; int j = 0; int order = 0; while (j < p.Size) { int rgb = ColorTransform.LabToRgb(new LabColor(p[j++], p[j++], p[j++])).ToArgb() & 0xffffff; ++order; cmd = new SqlCommand(@"INSERT INTO [PALETTE_COLOR] ([PALETTE_ID],[ORDER],[RGB]) VALUES (-" + (i + 1).ToString() + "," + order.ToString() + "," + rgb.ToString() + ")", conn); cmd.ExecuteNonQuery(); cmd = null; } } for (int i = 0; i < points.Length; i++) { int id = points[i].Id; int cluster = -(points[i].Index + 1); cmd = new SqlCommand(@"UPDATE PALETTE SET CLUSTER = " + cluster.ToString() + " WHERE ID = " + id.ToString(), conn); cmd.ExecuteNonQuery(); cmd = null; } } }