Skip to content

Instantly share code, notes, and snippets.

@segfo
Created August 1, 2017 22:31
Show Gist options
  • Save segfo/591012f8fc6971ecd643a25e13f4f9ef to your computer and use it in GitHub Desktop.
Save segfo/591012f8fc6971ecd643a25e13f4f9ef to your computer and use it in GitHub Desktop.
HSVからRGBに色を変換
struct RGB{
r:u8,
g:u8,
b:u8
}
impl RGB{
fn new()->Self{
Self{
r:0,
g:0,
b:0
}
}
fn print(&self){
println!("r:{} g:{} b:{}",self.r,self.g,self.b);
}
fn hsv2rgb(&mut self,h:f64,s:f64,v:f64){
let mut r = v;
let mut g = v;
let mut b = v;
let mut h=h;
if s > 0.0 {
h *= 6.0;
let i = h as u32;
let f = h - (i as f64);
match i{
0=>{g *= 1.0 - s * (1.0 - f); b *= 1.0 - s;},
1=>{r *= 1.0 - s * f; b *= 1.0 - s;},
2=>{r *= 1.0 - s; b *= 1.0 - s * (1.0 - f);},
3=>{r *= 1.0 - s;g *= 1.0 - s * f;},
4=>{r *= 1.0 - s * (1.0 - f);g *= 1.0 - s;},
5=>{g *= 1.0 - s;b *= 1.0 - s * f;},
_=>{}
}
}
self.r=(r*255.0) as u8;
self.g=(g*255.0) as u8;
self.b=(b*255.0) as u8;
}
}
fn main(){
let mut c = RGB::new();
for x in 0..100{
c.hsv2rgb((x as f64)/100.0,1.0,1.0);
c.print();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment