11个稳定版本
1.2.3 | 2024年7月18日 |
---|---|
1.2.2 | 2023年7月15日 |
1.2.1 | 2022年12月17日 |
1.1.1 | 2022年2月4日 |
1.0.1 | 2018年9月21日 |
#33 在 命令行界面
99,994 每月下载量
用于 128 个crates(直接使用26个)
65KB
696 行
真彩色 ↔ ANSI终端调色板转换器
ansi_colours
将24位sRGB颜色与ANSI终端(如xterm或rxvt-unicode在256色模式下)使用的8位颜色调色板之间进行转换。最常见的用例是在仅支持8位颜色调色板的终端模拟器中使用24位颜色。它允许终端通过其支持的值来近似真彩色。
在将真彩色映射到可用的256色调色板时,它会尝试在准确性和性能之间取得平衡。它不实现最快的算法,也不是最准确的,而是使用一个应该足够快且足够准确的公式,适用于大多数用例。
用法
该算法有C和Rust实现,可以轻松地从C、C++或Rust中使用。两种实现是等效的,并提供了最佳性能。自1.0.4版本以来,Rust crate在执行真彩色→ANSI索引转换时速度提高了25%,在执行反向转换时提高了75%。
Rust
在Cargo项目中使用此包就像添加一个依赖项一样简单
[dependencies]
ansi_colours = "1.2"
然后使用库提供的函数之一
use ansi_colours::*;
fn main() {
// Colour at given index:
println!("{:-3}: {:?}", 50, rgb_from_ansi256(50));
// Approximate true-colour by colour in the palette:
let rgb = (100, 200, 150);
let index = ansi256_from_rgb(rgb);
println!("{:?} ~ {:-3} {:?}", rgb, index, rgb_from_ansi256(index));
}
为了提高互操作性,该包定义了rgb
(默认启用)、ansi_term
、anstyle
和termcolor
cargo功能,这些功能为具有相同名称的crates添加了支持。
C和C++
在C或C++中使用此库的最简单方法是复制ansi_colour.h
和ansi256.c
文件到您的项目中,设置对ansi256.c
文件的编译步骤,将头文件添加到包含路径中,然后使用提供的两个函数
#include <stdio.h>
#include "ansi_colours.h"
int main() {
// Colour at given index:
printf("%-3u #%06x\n", 50, rgb_from_ansi256(50));
// Approximate true-colour by colour in the palette:
uint32_t rgb = 0x64C896;
uint8_t index = ansi256_from_rgb(rgb);
printf("#%06x ~ %-3u %06x\n", rgb, index, rgb_from_ansi256(index));
return 0;
}
不幸的是,C和C++生态系统没有一个集中的包分发服务,因此目前没有更方便的解决方案。
依赖关系
~0.1–7MB
~38K SLoC