Rust RGBA颜色处理库rgba_simple的使用,高效简化颜色格式转换与操作

Rust RGBA颜色处理库rgba_simple的使用,高效简化颜色格式转换与操作

rgba_simple是一个用于存储RGBA和Hex颜色格式的小型库。它包含在Hex和RGBA之间进行转换的功能。所有内部格式都可以使用serde进行序列化和反序列化。如果编译时启用了gdk功能,它还可以与gdk::RGBA相互转换。

示例代码

use rgba_simple::*;

let red_hex = String::from("#ff0000");  // 创建红色16进制字符串
let red: RGB<u8> = PrimaryColor::Red.into();  // 将预定义红色转换为RGB
assert_eq!(RGB::<u8>::from_hex(&red_hex), red);  // 验证16进制转换结果

完整示例demo

use rgba_simple::*;

fn main() {
    // 1. 从16进制字符串创建颜色
    let blue_hex = "#0000ff";
    let blue_rgb = RGB::<u8>::from_hex(blue_hex).unwrap();
    println!("Blue from hex: {:?}", blue_rgb);

    // 2. 使用预定义颜色
    let green: RGB<u8> = PrimaryColor::Green.into();
    println!("Predefined green: {:?}", green);

    // 3. 手动创建RGBA颜色
    let custom_color = RGBA {
        r: 255,
        g: 128,
        b: 0,
        a: 255,
    };
    println!("Custom orange color: {:?}", custom_color);

    // 4. 转换为16进制字符串
    let yellow_hex = RGB::<u8> {
        r: 255,
        g: 255,
        b: 0,
    }.to_hex();
    println!("Yellow in hex: {}", yellow_hex);

    // 5. 序列化示例(需要serde支持)
    #[cfg(feature = "serde")]
    {
        let color = RGB::<u8>::from_hex("#ff00ff").unwrap();
        let serialized = serde_json::to_string(&color).unwrap();
        println!("Serialized magenta: {}", serialized);
    }
}

这个库适用于简单的颜色需求,如果你不需要处理其他颜色空间(如CMYK或HSL)的颜色,它是一个轻量高效的解决方案。


1 回复

Rust RGBA颜色处理库rgba_simple使用指南

rgba_simple是一个轻量级的Rust库,专门用于简化RGBA颜色格式的转换与操作。它提供了直观的API来处理颜色值,支持多种颜色格式之间的转换以及基本的颜色操作。

安装

在Cargo.toml中添加依赖:

[dependencies]
rgba_simple = "0.1"

基本用法

创建颜色对象

use rgba_simple::{Rgba, RgbaColor};

// 从RGBA分量创建
let red = Rgba::new(255, 0, 0, 255);

// 从十六进制创建
let green = Rgba::from_hex("#00FF00FF").unwrap();

// 从CSS颜色名称创建
let blue = Rgba::from_name("blue").unwrap();

颜色格式转换

let color = Rgba::new(128, 0, 255, 200);

// 转换为十六进制字符串
println!("Hex: {}", color.to_hex()); // #8000FFC8

// 转换为RGB字符串
println!("RGB: {}", color.to_rgb()); // rgb(128, 0, 255)

// 转换为RGBA字符串
println!("RGBA: {}", color.to_rgba()); // rgba(128, 0, 255, 0.784)

// 转换为HSL
let hsl = color.to_hsl();
println!("HSL: H:{:.2} S:{:.2} L:{:.2}", hsl.h, hsl.s, hsl.l);

颜色操作

let mut color = Rgba::new(100, 150, 200, 255);

// 调整亮度
color.lighten(0.1); // 增加10%亮度
color.darken(0.2);  // 减少20%亮度

// 调整透明度
color.set_alpha(0.5); // 设置为50%透明度

// 混合颜色
let color1 = Rgba::new(255, 0, 0, 255);
let color2 = Rgba::new(0, 0, 255, 255);
let mixed = color1.blend(&color2, 0.5); // 50%混合

实用功能

// 计算颜色对比度
let black = Rgba::new(0, 0, 0, 255);
let white = Rgba::new(255, 255, 255, 255);
let contrast = black.contrast(&white);
println!("Contrast ratio: {:.2}:1", contrast); // 21.00:1

// 检查颜色是否满足WCAG对比度要求
if black.has_sufficient_contrast(&white, 4.5) {
    println!("满足WCAG AA标准");
}

高级用法

颜色生成

// 生成随机颜色
let random_color = Rgba::random();

// 生成互补色
let base_color = Rgba::from_name("teal").unwrap();
let complementary = base_color.complementary();

// 生成色轮上的相邻色
let analogous = base_color.analogous(30.0); // 30度偏移

颜色空间转换

let color = Rgba::new(180, 120, 60, 255);

// 转换为HSV
let hsv = color.to_hsv();
println!("HSV: H:{:.2} S:{:.2} V:{:.2}", hsv.h, hsv.s, hsv.v);

// 从HSV转换回来
let from_hsv = Rgba::from_hsv(hsv.h, hsv.s, hsv.v, 1.0);

性能提示

rgba_simple在设计时考虑了性能:

  • 所有颜色对象都是不可变的,操作返回新对象
  • 内部使用u8存储颜色分量,内存占用小
  • 常用操作都经过优化,避免不必要的计算

对于需要处理大量颜色的场景,建议预先计算并缓存结果。

完整示例代码

use rgba_simple::{Rgba, RgbaColor};

fn main() {
    // 1. 创建颜色对象
    println!("=== 创建颜色对象 ===");
    let red = Rgba::new(255, 0, 0, 255);
    let green = Rgba::from_hex("#00FF00FF").unwrap();
    let blue = Rgba::from_name("blue").unwrap();
    
    // 2. 颜色格式转换
    println!("\n=== 颜色格式转换 ===");
    let color = Rgba::new(128, 0, 255, 200);
    println!("Hex: {}", color.to_hex());
    println!("RGB: {}", color.to_rgb());
    println!("RGBA: {}", color.to_rgba());
    
    // 3. 颜色操作
    println!("\n=== 颜色操作 ===");
    let mut color = Rgba::new(100, 150, 200, 255);
    color.lighten(0.1);
    println!("变亮10%: {}", color.to_hex());
    
    // 4. 实用功能
    println!("\n=== 实用功能 ===");
    let black = Rgba::new(0, 0, 0, 255);
    let white = Rgba::new(255, 255, 255, 255);
    println!("对比度: {:.2}", black.contrast(&white));
    
    // 5. 高级用法
    println!("\n=== 高级用法 ===");
    let random_color = Rgba::random();
    println!("随机颜色: {}", random_color.to_hex());
    
    let base_color = Rgba::from_name("teal").unwrap();
    println!("互补色: {}", base_color.complementary().to_hex());
}

总结

rgba_simple提供了简单直观的API来处理RGBA颜色,适合需要颜色操作、格式转换或颜色空间转换的Rust应用。它的轻量级设计和全面功能使其成为图形应用、数据可视化和Web开发中的理想选择。

回到顶部