from enum import Enum from typing import Tuple from utils.logger_config import logger class RGBColor(Enum): """RGB颜色枚举类,包含常用颜色的RGB值""" # 基础颜色 RED = (255, 0, 0) GREEN = (0, 255, 0) BLUE = (0, 0, 255) # 混合色 YELLOW = (255, 255, 0) CYAN = (0, 255, 255) MAGENTA = (255, 0, 255) # 白色和黑色 WHITE = (255, 255, 255) BLACK = (0, 0, 0) # 灰色系 GRAY = (128, 128, 128) LIGHT_GRAY = (192, 192, 192) DARK_GRAY = (64, 64, 64) # 暖色调 ORANGE = (255, 165, 0) PINK = (255, 192, 203) ROSE = (255, 0, 128) CORAL = (255, 127, 80) # 冷色调 LIME = (0, 255, 0) AQUA = (0, 255, 255) NAVY = (0, 0, 128) TEAL = (0, 128, 128) # 紫色系 PURPLE = (128, 0, 128) VIOLET = (238, 130, 238) INDIGO = (75, 0, 130) # 棕色系 BROWN = (165, 42, 42) MAROON = (128, 0, 0) OLIVE = (128, 128, 0) # 特殊颜色 GOLD = (255, 215, 0) SILVER = (192, 192, 192) COPPER = (184, 115, 51) def __init__(self, r: int, g: int, b: int): """初始化RGB颜色值""" self.r = r self.g = g self.b = b self._value_ = (r, g, b) @property def rgb_tuple(self) -> Tuple[int, int, int]: """返回RGB元组""" return (self.r, self.g, self.b) @property def hex_value(self) -> str: """返回十六进制颜色值""" return f"#{self.r:02x}{self.g:02x}{self.b:02x}".upper() def __str__(self) -> str: """字符串表示""" return f"{self.name}: RGB{self.rgb_tuple} ({self.hex_value})" @classmethod def from_hex(cls, hex_color: str) -> 'RGBColor': """从十六进制颜色值创建RGBColor实例""" hex_color = hex_color.lstrip('#') if len(hex_color) != 6: raise ValueError("十六进制颜色值必须是6位字符") r = int(hex_color[0:2], 16) g = int(hex_color[2:4], 16) b = int(hex_color[4:6], 16) # 查找最接近的预定义颜色 closest_color = None min_distance = float('inf') for color in cls: distance = ((r - color.r) ** 2 + (g - color.g) ** 2 + (b - color.b) ** 2) ** 0.5 if distance < min_distance: min_distance = distance closest_color = color return closest_color @classmethod def from_rgb(cls, r: int, g: int, b: int) -> 'RGBColor': """从RGB值创建RGBColor实例""" # 确保RGB值在有效范围内 r = max(0, min(255, r)) g = max(0, min(255, g)) b = max(0, min(255, b)) # 查找最接近的预定义颜色 closest_color = None min_distance = float('inf') for color in cls: distance = ((r - color.r) ** 2 + (g - color.g) ** 2 + (b - color.b) ** 2) ** 0.5 if distance < min_distance: min_distance = distance closest_color = color return closest_color class LEDEffectType(Enum): """LED效果类型枚举""" SOLID = 0 BLINK = 1 BREATH = 2 COLOR_RANDOM_WAVE = 5 COLOR_RANDOM_WINK = 7 COLOR_RANDOM_BREATH = 8 WINK = 12 class LEDBrightness(Enum): """LED亮度等级枚举""" OFF = 0 LOW = 25 MEDIUM = 50 HIGH = 75 MAXIMUM = 255 # 使用示例 if __name__ == "__main__": # 基本使用 logger.info("=== RGB颜色枚举使用示例 ===") # 获取颜色 red = RGBColor.RED logger.info(f"红色: {red}") logger.info(f"RGB值: {red.rgb_tuple}") logger.info(f"十六进制: {red.hex_value}") # 从十六进制创建 custom_color = RGBColor.from_hex("#FF5733") logger.info(f"从十六进制创建: {custom_color}") # 从RGB值创建 custom_rgb = RGBColor.from_rgb(100, 200, 50) logger.info(f"从RGB创建: {custom_rgb}") # 遍历所有颜色 logger.info("\n=== 所有预定义颜色 ===") for color in RGBColor: logger.info(f"{color.name:12} - {color}")