Crates.io | cichlid |
lib.rs | cichlid |
version | 0.2.1 |
source | src |
created_at | 2019-04-07 02:07:22.934435 |
updated_at | 2019-09-07 06:04:34.304419 |
description | A color math library for programming addressable LEDs. |
homepage | https://github.com/sfleischman105/cichlid |
repository | https://github.com/sfleischman105/cichlid |
max_upload_size | |
id | 126290 |
size | 122,696 |
A simple Rust library for managing RGB colorings. Works with no-std
environments as well.
Currently this library is geared toward use in embedded systems, but does contain useful APIs that are more generally useful.
Fast u8
and u16
math — Cichlid includes functions for scaling, dimming, and
brightening single and double byte values. Basic trigonometric functions (sine, cosine)
are implemented as well.
HSV and RGB support — Full control over each color is provided by the HSV
and
ColorRGB
structures. Different means of converting from HSV
to ColorRGB
are also
implemented.
Axial (Two Point) Color Gradients — Create smooth transitions between any two colors for any number of steps.
Power Consumption Estimating — Estimating power requirements can be done with
structs implementing the PowerEstimator
trait.
This Library is still in its infancy, and as such there may be a lack of documentation and vigorous testing.
General Color operations:
use cichlid::{HSV, ColorRGB};
let red = ColorRGB::Red;
let blue = ColorRGB::Blue;
let mut purple = red + blue;
assert_eq!(purple, ColorRGB::new(255, 0, 255));
purple.scale(128); // Scale by half
assert_eq!(purple, ColorRGB::new(128, 0, 128));
purple *= 2; // Multiple all components by two
assert_eq!(purple, red + blue);
Using HSV
(Hue, Saturation, Value) and converting to ColorRGB
:
use cichlid::{HSV, ColorRGB};
let red_hsv = HSV::new(0, 255, 255);
let red_rgb = ColorRGB::from(red_hsv);
assert_eq!(red_rgb, ColorRGB::Red);
Creating a gradient is very easy, simply import the trait and call the method:
use cichlid::{HSV, ColorRGB, GradientDirection, prelude::*};
let mut colors = [ColorRGB::Black; 100];
let start = HSV::new(0, 255, 255);
let end = HSV::new(100, 255, 180);
colors.gradient_fill(start, end, GradientDirection::Longest);
Any and all contributions are welcome! Open up a PR to contribute some improvements. Look at the Issues tab to see what needs some help.
Cichlid is distributed under the terms of the MIT license. See LICENSE-MIT for details. Opening a pull requests is assumed to signal agreement with these licensing terms.