@@ -18,37 +18,21 @@ pub enum ColorMode {
18
18
impl ColorMode {
19
19
fn conv_color ( & self , color : [ f64 ; 3 ] ) -> Color {
20
20
let fit_linear_curve = |x : f64 | ( 127. * x + 128. ) as u8 ;
21
-
21
+ let retrofit_ansi = |color : [ f64 ; 3 ] | {
22
+ let ratio = [ 36 , 6 , 1 ] ;
23
+ let ascii_color_offset = 16u16 ;
24
+ color
25
+ . into_iter ( )
26
+ . map ( fit_linear_curve)
27
+ . zip ( ratio)
28
+ . fold ( ascii_color_offset, |acc, ( c, m) | {
29
+ acc + ( ( 6. * ( c as f64 / 256. ) ) . floor ( ) as u16 ) * m
30
+ } )
31
+ } ;
22
32
match self {
23
33
ColorMode :: TrueColor => Color :: Color24b ( color. map ( fit_linear_curve) ) ,
24
- ColorMode :: ANSI256 => {
25
- let ratio = [ 36 , 6 , 1 ] ;
26
- let ascii_color_offset = 16u16 ;
27
-
28
- Color :: ANSI256 (
29
- color
30
- . into_iter ( )
31
- . map ( fit_linear_curve)
32
- . zip ( ratio)
33
- . fold ( ascii_color_offset, |acc, ( c, m) | {
34
- acc + ( ( 6. * ( c as f64 / 256. ) ) . floor ( ) as u16 ) * m
35
- } ) ,
36
- )
37
- }
38
- ColorMode :: ANSI => {
39
- let ratio = [ 32 , 16 , 14 ] ;
40
- let ascii_color_offset = 91u8 ;
41
-
42
- Color :: ANSI (
43
- color
44
- . into_iter ( )
45
- . map ( fit_linear_curve)
46
- . zip ( ratio)
47
- . fold ( ascii_color_offset, |acc, ( c, m) | {
48
- acc + ( ( 4. * ( c as f64 / 256. ) ) . floor ( ) as u8 ) * m
49
- } ) ,
50
- )
51
- }
34
+ ColorMode :: ANSI256 => Color :: ANSI256 ( retrofit_ansi ( color) ) ,
35
+ ColorMode :: ANSI => Color :: ANSI ( retrofit_ansi ( color) as u8 ) ,
52
36
}
53
37
}
54
38
}
0 commit comments