#rgb #hex #rgba #color #graphics

无std hex_color

用于处理RGB(A)十六进制颜色的简单、轻量级库

4个稳定版本

3.0.0 2023年12月5日
2.1.0 2023年12月2日
2.0.0 2022年9月8日
1.0.0 2021年6月27日

#43 in 图像

Download history 1385/week @ 2024-04-16 1456/week @ 2024-04-23 1258/week @ 2024-04-30 1694/week @ 2024-05-07 1545/week @ 2024-05-14 1389/week @ 2024-05-21 1277/week @ 2024-05-28 1480/week @ 2024-06-04 1493/week @ 2024-06-11 1287/week @ 2024-06-18 1585/week @ 2024-06-25 1168/week @ 2024-07-02 1180/week @ 2024-07-09 1022/week @ 2024-07-16 1499/week @ 2024-07-23 1481/week @ 2024-07-30

5,432 每月下载量
用于 15 个crates (14 直接)

MIT/Apache

88KB
874

hex_color

用于处理RGB(A)十六进制颜色的简单、轻量级库。

Build Status Latest Version

文档

模块文档及示例。模块文档还包括对支持解析十六进制颜色的语法的全面描述。

用法

此crate位于crates.io上,您可以通过将hex_color添加到项目的Cargo.toml依赖中来进行使用

[dependencies]
hex_color = "3"

示例

基本解析

use hex_color::HexColor;

let cyan = HexColor::parse("#0FF")?;
assert_eq!(cyan, HexColor::CYAN);

let transparent_plum = HexColor::parse("#DDA0DD80")?;
assert_eq!(transparent_plum, HexColor::rgba(221, 160, 221, 128));

// Strictly enforce only an RGB color through parse_rgb:
let pink = HexColor::parse_rgb("#FFC0CB")?;
assert_eq!(pink, HexColor::rgb(255, 192, 203));

// Strictly enforce an alpha component through parse_rgba:
let opaque_white = HexColor::parse_rgba("#FFFF")?;
assert_eq!(opaque_white, HexColor::WHITE);

灵活构造函数

use hex_color::HexColor;

let violet = HexColor::rgb(238, 130, 238);
let transparent_maroon= HexColor::rgba(128, 0, 0, 128);
let transparent_gray = HexColor::GRAY.with_a(128);
let lavender = HexColor::from_u24(0x00E6_E6FA);
let transparent_lavender = HexColor::from_u32(0xE6E6_FA80);
let floral_white = HexColor::WHITE
    .with_g(250)
    .with_b(240);

全面算术

use hex_color::HexColor;

assert_eq!(HexColor::BLUE + HexColor::RED, HexColor::MAGENTA);
assert_eq!(
    HexColor::CYAN.saturating_add(HexColor::GRAY),
    HexColor::rgb(128, 255, 255),
);
assert_eq!(
    HexColor::BLACK.wrapping_sub(HexColor::achromatic(1)),
    HexColor::WHITE,
);

rand 一起

使用 rand + std 功能通过 rand 生成随机颜色

use hex_color::HexColor;

let random_rgb: HexColor = rand::random();

要指定是否随机创建RGB或RGBA颜色,请分别使用 HexColor::random_rgbHexColor::random_rgba

use hex_color::HexColor;

let random_rgb = HexColor::random_rgb();
let random_rgba = HexColor::random_rgba();

serde 一起

使用 serde 将颜色以多种格式进行序列化和反序列化:u24u32rgbrgba

use hex_color::HexColor;
use serde::{Deserialize, Serialize};
use serde_json::json;

#[derive(Debug, PartialEq, Deserialize, Serialize)]
struct Color {
    name: String,
    value: HexColor,
}

let json_input = json!({
    "name": "Light Coral",
    "value": "#F08080",
});
assert_eq!(
    serde_json::from_value::<Color>(json_input)?,
    Color {
        name: String::from("Light Coral"),
        value: HexColor::rgb(240, 128, 128),
    },
);

let my_color = Color {
    name: String::from("Dark Salmon"),
    value: HexColor::rgb(233, 150, 122),
};
assert_eq!(
    serde_json::to_value(my_color)?,
    json!({
        "name": "Dark Salmon",
        "value": "#E9967A",
    }),
);

#[derive(Debug, PartialEq, Deserialize, Serialize)]
struct NumericColor {
    name: String,
    #[serde(with = "hex_color::u24")]
    value: HexColor,
}

let json_input = json!({
    "name": "Light Coral",
    "value": 0x00F0_8080_u32,
});
assert_eq!(
    serde_json::from_value::<NumericColor>(json_input)?,
    NumericColor {
        name: String::from("Light Coral"),
        value: HexColor::rgb(240, 128, 128),
    },
);

let my_color = NumericColor {
    name: String::from("Dark Salmon"),
    value: HexColor::rgb(233, 150, 122),
};
assert_eq!(
    serde_json::to_value(my_color)?,
    json!({
        "name": "Dark Salmon",
        "value": 0x00E9_967A_u32,
    }),
);

特性

  • rand 启用与 rand crate 的原生兼容性。
  • serde 启用与 serde crate 的序列化和反序列化。
  • stdstd::error::Error 上启用对 ParseHexColorError 的错误处理。否则,它需要与 rand 一起使用以进行 HexColor::random_rgbHexColor::random_rgba 和当然,rand::random

注意:默认情况下仅启用 std 功能。

许可证

许可协议为以下之一

由您选择。

贡献

除非您明确声明,否则任何有意提交给工作以包含在内的贡献,根据 Apache-2.0 许可证定义,应双重许可如上所述,无需附加条款或条件。

依赖项

~0–510KB