Advertisement
Guest User

color_functions.c

a guest
Jun 11th, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.89 KB | None | 0 0
  1. unsigned int value_to_hue_inverted(double v, double maxv) {
  2.    
  3.     if (v < 0) return 0xff000000;
  4.    
  5.     double f = v * 5.0 / maxv;
  6.     int x = (int)f;
  7.     if (x > 4) { x = 4; f = 1.0; } else f = f - x;
  8.  
  9.     switch (x) {
  10.         case 0:
  11.             return 0xff0000ff + ((int)(255*f)<<8);
  12.         case 1:
  13.             return 0xff00ff00 + 255*(1-f);
  14.         case 2:
  15.             return 0xff00ff00 + ((int)(255*f)<<16);
  16.         case 3:
  17.             return 0xffff0000 + ((int)(255*(1-f))<<8);
  18.         case 4:
  19.             return 0xffff0000 + 255*f;
  20.     }
  21.    
  22.     return 0xffff0000;
  23. }
  24.  
  25. unsigned int value_to_hue(double v, double maxv) {
  26.    
  27.     if (v < 0) return 0xff000000;
  28.    
  29.     double f = v * 5.0 / maxv;
  30.     int x = (int)f;
  31.     if (x > 4) { x = 4; f = 1.0; } else f = f - x;
  32.  
  33.     switch (x) {
  34.         case 0:
  35.             return 0xffff0000 + 255*(1-f);
  36.         case 1:
  37.             return 0xffff0000 + ((int)(255*f)<<8);
  38.         case 2:
  39.             return 0xff00ff00 + ((int)(255*(1-f))<<16);
  40.         case 3:
  41.             return 0xff00ff00 + 255*f;
  42.         case 4:
  43.             return 0xff0000ff + ((int)(255*(1-f))<<8);
  44.     }
  45.    
  46.     return 0xffff0000;
  47. }
  48.  
  49. unsigned int value_to_bryw(double v, double maxv) {
  50.    
  51.     if (v < 0) return 0xff000000;
  52.    
  53.     double f = v*v * 4.0 / (maxv*maxv);
  54.     int x = (int)f;
  55.     if (x > 3) { x = 3; f = 1.0; } else f = f - x;
  56.  
  57.     switch  (x) {
  58.         case 0:
  59.             return 0xff000000 + 255*f;
  60.         case 1:
  61.             return 0xff000000 + ((int)(255*f)<<16) + 255*(1-f);
  62.         case 2:
  63.             return 0xffff0000 + ((int)(255*f)<<8);
  64.         case 3:
  65.             return 0xffffff00 + 255*f;
  66.     }
  67.    
  68.     return 0xffff0000;
  69. }
  70.  
  71. unsigned int value_to_bryw2(double v, double maxv) {
  72.    
  73.     if (v < 0) return 0xff000000;
  74.    
  75.     double f = v * 4.0 / maxv;
  76.     int x = (int)f;
  77.     if (x > 3) { x = 3; f = 1.0; } else f = f - x;
  78.    
  79.     switch  (x) {
  80.         case 0:
  81.             return 0xff000000 + 255*f;
  82.         case 1:
  83.             return 0xff000000 + ((int)(255*f)<<16) + 255*(1-f);
  84.         case 2:
  85.             return 0xffff0000 + ((int)(255*f)<<8);
  86.         case 3:
  87.             return 0xffffff00 + 255*f;
  88.     }
  89.    
  90.     return 0xffff0000;
  91. }
  92.  
  93. unsigned int value_to_bcy(double v, double maxv) {
  94.    
  95.     if (v < 0) return 0xff000000;
  96.    
  97.     double f = v * 3.0 / maxv;
  98.     int x = (int)f;
  99.     if (x > 2) { x = 2; f = 1.0; } else f = f - x;
  100.    
  101.     switch (x) {
  102.         case 0:
  103.             return 0xff000000 + 255*f;
  104.         case 1:
  105.             return 0xff0000ff + ((int)(255*f)<<8);
  106.         case 2:
  107.             return 0xff00ffff + ((int)(255*f)<<16);
  108.     }
  109.    
  110.     return 0xffff0000;
  111. }
  112.  
  113. unsigned int value_to_orange_range(double v, double maxv) {
  114.    
  115.     if (v < 0) return 0xff000000;
  116.    
  117.     double f = v * 3.0 / maxv;
  118.     int x = (int)f;
  119.     if (x > 2) { x = 2; f = 1.0; } else f = f - x;
  120.  
  121.     switch (x) {
  122.         case 0:
  123.             return 0xff000000 + ((int)(255*f)<<16) + ((int)(51*f)<<8);
  124.         case 1:
  125.             return 0xffff0000 + ((int)(51+204*f)<<8);
  126.         case 2:
  127.             return 0xffffff00 + 255*f;
  128.     }
  129.    
  130.     return 0xffff0000;
  131. }
  132.  
  133. unsigned int value_to_green_range(double v, double maxv) {
  134.    
  135.     if (v < 0) return 0xff000000;
  136.    
  137.     double f = v * 2.0 / maxv;
  138.     int x = (int)f;
  139.     if (x > 1) { x = 1; f = 1.0; } else f = f - x;
  140.  
  141.     switch (x) {
  142.         case 0:
  143.             return 0xff000000 + ((int)(162*f)<<8) + 89*f;
  144.         case 1:
  145.             return 0xff000000 + ((int)(255*f)<<16) + ((int)(162+93*f)<<8) + (89+166*f);
  146.     }
  147.    
  148.     return 0xffff0000;
  149. }
  150.  
  151. unsigned int value_to_purple_range(double v, double maxv) {
  152.    
  153.     if (v < 0) return 0xff000000;
  154.    
  155.     double f = v * 2.0 / maxv;
  156.     int x = (int)f;
  157.     if (x > 1) { x = 1; f = 1.0; } else f = f - x;
  158.  
  159.     switch (x) {
  160.         case 0:
  161.             return 0xff000000 + ((int)(230*f)<<16) + 172*f;
  162.         case 1:
  163.             return 0xff000000 + ((int)(230+25*f)<<16) + ((int)(255*f)<<8) + (172+83*f);
  164.     }
  165.    
  166.     return 0xffff0000;
  167. }
  168.  
  169. unsigned int value_to_ideal_blue_range(double v, double maxv) {
  170.    
  171.     if (v < 0) return 0xff000000;
  172.    
  173.     double f = v * 2.0 / maxv;
  174.     int x = (int)f;
  175.     if (x > 1) { x = 1; f = 1.0; } else f = f - x;
  176.  
  177.     switch (x) {
  178.         case 0:
  179.             return 0xff000000 + ((int)(144*f)<<8) + 255*f;
  180.         case 1:
  181.             return 0xff0000ff + ((int)(255*f)<<16) + ((int)(144+111*f)<<8);
  182.     }
  183.    
  184.     return 0xffff0000;
  185. }
  186.  
  187.  
  188. unsigned int (*COLOR_FUNCTIONS[])(double, double) = {
  189.     value_to_hue_inverted,
  190.     value_to_hue,
  191.    
  192.     value_to_bryw,
  193.     value_to_bryw2,
  194.    
  195.     value_to_bcy,
  196.    
  197.     value_to_green_range,
  198.     value_to_purple_range,
  199.     value_to_orange_range,
  200.     value_to_ideal_blue_range,
  201. };
  202.  
  203. const int COLOR_FUNCTIONS_COUNT = 9;
  204. int CURRENT_CF = 8;     // value_to_ideal_blue_range
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement