| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- 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}")
|