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开发中的理想选择。