Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 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
     });
 }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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;
                }
            }
        }