📜  rgb 到 hex 转换 - Rust (1)

📅  最后修改于: 2023-12-03 15:19:49.294000             🧑  作者: Mango

RGB 到 HEX 转换 - Rust

本文介绍了如何使用 Rust 编写一个将 RGB 颜色值转换为 HEX 颜色值的程序。

什么是 RGB 和 HEX 颜色值?

RGB 颜色值是由红色(R)、绿色(G)和蓝色(B)的颜色组成的数字值。每个颜色的值在 0 到 255 之间。例如,纯红色是 (255, 0, 0)。

HEX 颜色值是由六位十六进制数表示的颜色值。其中前两个数字表示红色,中间两个数字表示绿色,最后两个数字表示蓝色。例如,纯红色是 #FF0000。

转换算法

RGB 颜色值和 HEX 颜色值之间的转换算法如下:

  1. 将 RGB 颜色值转换为十六进制的字符串。
  2. 将字符串中的每两个字符转换为一个十六进制数。
  3. 将三个十六进制数合并为一个六位的十六进制数。
Rust 实现
fn rgb_to_hex(r: u8, g: u8, b: u8) -> String {
    format!("{:02X}{:02X}{:02X}", r, g, b)
}

fn hex_to_rgb(hex: &str) -> (u8, u8, u8) {
    let r = u8::from_str_radix(&hex[0..2], 16).unwrap();
    let g = u8::from_str_radix(&hex[2..4], 16).unwrap();
    let b = u8::from_str_radix(&hex[4..6], 16).unwrap();
    (r, g, b)
}

上面的代码实现了 RGB 到 HEX 和 HEX 到 RGB 的转换。

rgb_to_hex 函数接受三个参数:R、G 和 B 的值,并返回一个六位的十六进制字符串。它使用 Rust 中的 format! 宏将十六进制数格式化为字符串。

hex_to_rgb 函数接受一个字符串参数,该字符串表示十六进制的颜色值。它使用 u8::from_str_radix 函数将字符串解析成十六进制数,并返回一个包含 R、G 和 B 值的元组。

测试
#[test]
fn test_rgb_to_hex() {
    assert_eq!(rgb_to_hex(255, 0, 0), "FF0000");
    assert_eq!(rgb_to_hex(0, 255, 0), "00FF00");
    assert_eq!(rgb_to_hex(0, 0, 255), "0000FF");
}

#[test]
fn test_hex_to_rgb() {
    assert_eq!(hex_to_rgb("FF0000"), (255, 0, 0));
    assert_eq!(hex_to_rgb("00FF00"), (0, 255, 0));
    assert_eq!(hex_to_rgb("0000FF"), (0, 0, 255));
}

上面的代码是测试用例。它测试了代码的正确性。第一个测试函数测试了 rgb_to_hex 函数的正确性,第二个测试函数测试了 hex_to_rgb 函数的正确性。如果测试失败,Rust 会抛出一个异常。