Advertisement
Aslai

Pallette rounding

Jan 21st, 2012
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.81 KB | None | 0 0
  1. void rgb2lab( double r, double g,  double b, double* rr, double* gg, double* bb )
  2. {
  3.     if( r > (( double ) 0.04045 ) ){
  4.         r = pow(( r + (( double ) 0.055 ) / ( double ) 1.055 ), ( double ) 2.4 );
  5.     } else{
  6.         r /= ( double ) 12.92;
  7.     }
  8.     if( g > ( double ) 0.04045 ){
  9.         g = pow(( g + (( double ) 0.055 ) / ( double ) 1.055 ), ( double ) 2.4 );
  10.     } else{
  11.         g /= ( double ) 12.92;
  12.     }
  13.     if( b > ( double ) 0.04045 ){
  14.         b = pow(( b + (( double ) 0.055 ) / ( double ) 1.055 ), ( double ) 2.4 );
  15.     } else{
  16.         b /= ( double ) 12.92;
  17.     }
  18.     r = r * 100;
  19.     g = g * 100;
  20.     b = b * 100;
  21.     double rrr = ( r * ( double ) 0.4124 + g * ( double ) 0.3576 + b * ( double ) 0.1805 ) / (( double ) 95.047 );
  22.     double ggg = ( r * ( double ) 0.2126 + g * ( double ) 0.7152 + b * ( double ) 0.0722 ) / (( double ) 100 );
  23.     double bbb = ( r * ( double ) 0.0193 + g * ( double ) 0.1192 + b * ( double ) 0.9505 ) / (( double ) 108.883 );
  24.     if( rrr > ( double ) 0.008856 ){
  25.         rrr = pow( rrr , ( double ) .333333333333 );
  26.     } else{
  27.         rrr = (( double ) 7.787 * rrr ) + ((( double ) 16 ) / (( double ) 116 ) );
  28.     }
  29.     if( ggg > ( double ) 0.008856 ){
  30.         ggg = pow( ggg , ( double ) .333333333333 );
  31.     } else{
  32.         ggg = (( double ) 7.787 * ggg ) + ((( double ) 16 ) / (( double ) 116 ) );
  33.     }
  34.     if( bbb > ( double ) 0.008856 ){
  35.         bbb = pow( bbb , ( double ) .333333333333 );
  36.     } else {
  37.         bbb = (( double ) 7.787 * bbb ) + ((( double ) 16 ) / (( double ) 116 ) );
  38.     }
  39.     *rr = (( double ) 116 * ggg ) - ( double ) 16;
  40.     *gg = ( double ) 500 * ( rrr - ggg );
  41.     *bb = ( double ) 200 * ( ggg - bbb );
  42. }
  43.  
  44.  
  45. unsigned long int getCloseCol( unsigned long int inCol )
  46. {
  47.     int tttt = 0;
  48.     double r = ( inCol >> 24 ) & 0xFF;
  49.     double g = ( inCol >> 16 ) & 0xFF;
  50.     double b = ( inCol >> 8 ) & 0xFF;
  51.     double rl, gl, bl;
  52.     rgb2lab( r, g, b, &rl, &gl, &bl );
  53.     unsigned long int cout = inCol;
  54.     int bout = 0;
  55.     double cnum = pow( 255, 255 ) + pow( 255, 255 ) + pow( 255, 255 );
  56.     unsigned long int tmp = 0xFFFFFFFF;
  57.     for( int i = 0; cats[i] != 0; i ++ ){
  58.         if( cats[i]->blockCount > 0 && cats[i]->enabled == true ){
  59.             for( int j = 0; j < cats[i]->blockCount; j += 1 ){
  60.                 tttt += 1;
  61.                 BLOCKTYPE* ttt = blockLookup( cats[i]->blocks[j] );
  62.                 double tmp = sqr( ttt->labR - rl ) + sqr( ttt->labG - gl ) + sqr( ttt->labB - bl );
  63.                 if( abss( tmp ) < cnum ){
  64.                     cnum = abss( tmp );
  65.                     bout = cats[i]->blocks[j];
  66.                     cout = ttt->color;
  67.                 }
  68.  
  69.             }
  70.         }
  71.     }
  72.     if( tttt == 0 ){
  73.         bout = 0;
  74.     }
  75.     if( cout == 0 )
  76.         return 0;
  77.     return bout;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement