Beispiel #1
0
    def fill_missing_colors(self):
        """
        Generates any missing colors based on average saturation and value,
        and the sum and difference of the default hue and average hue
        difference (between adjacent colors).
        """
        assert len(self) >= 2, "Need at least 2 colors in palette to continue"
        hue_diff = self.get_average_difference_from_target("hue")
        avg_saturation, avg_value = map(self.get_average_value, ("saturation", "value"))
        colors = sorted(self.target.items(), key=lambda (name, rgb): rgb)
        for index in range(len(colors)):
            name, rgb = colors[index]
            if name in self:
                continue

            default_color = Color(*rgb)
            candidates = []

            if (default_color.hue - hue_diff) >= 0:
                candidates.append(Color.from_hsv([default_color.hue - hue_diff, avg_saturation, avg_value]))
            if (default_color.hue + hue_diff) <= 360:
                candidates.append(Color.from_hsv([default_color.hue + hue_diff, avg_saturation, avg_value]))
            elif (default_color.hue + hue_diff) > 360:
                print name, (default_color.hue - hue_diff) % 360

            self[name] = map(lambda candidate: (candidate, default_color.distance(candidate)), candidates)