Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void rgb2lab( double r, double g, double b, double* rr, double* gg, double* bb )
- {
- if( r > (( double ) 0.04045 ) ){
- r = pow(( r + (( double ) 0.055 ) / ( double ) 1.055 ), ( double ) 2.4 );
- } else{
- r /= ( double ) 12.92;
- }
- if( g > ( double ) 0.04045 ){
- g = pow(( g + (( double ) 0.055 ) / ( double ) 1.055 ), ( double ) 2.4 );
- } else{
- g /= ( double ) 12.92;
- }
- if( b > ( double ) 0.04045 ){
- b = pow(( b + (( double ) 0.055 ) / ( double ) 1.055 ), ( double ) 2.4 );
- } else{
- b /= ( double ) 12.92;
- }
- r = r * 100;
- g = g * 100;
- b = b * 100;
- double rrr = ( r * ( double ) 0.4124 + g * ( double ) 0.3576 + b * ( double ) 0.1805 ) / (( double ) 95.047 );
- double ggg = ( r * ( double ) 0.2126 + g * ( double ) 0.7152 + b * ( double ) 0.0722 ) / (( double ) 100 );
- double bbb = ( r * ( double ) 0.0193 + g * ( double ) 0.1192 + b * ( double ) 0.9505 ) / (( double ) 108.883 );
- if( rrr > ( double ) 0.008856 ){
- rrr = pow( rrr , ( double ) .333333333333 );
- } else{
- rrr = (( double ) 7.787 * rrr ) + ((( double ) 16 ) / (( double ) 116 ) );
- }
- if( ggg > ( double ) 0.008856 ){
- ggg = pow( ggg , ( double ) .333333333333 );
- } else{
- ggg = (( double ) 7.787 * ggg ) + ((( double ) 16 ) / (( double ) 116 ) );
- }
- if( bbb > ( double ) 0.008856 ){
- bbb = pow( bbb , ( double ) .333333333333 );
- } else {
- bbb = (( double ) 7.787 * bbb ) + ((( double ) 16 ) / (( double ) 116 ) );
- }
- *rr = (( double ) 116 * ggg ) - ( double ) 16;
- *gg = ( double ) 500 * ( rrr - ggg );
- *bb = ( double ) 200 * ( ggg - bbb );
- }
- unsigned long int getCloseCol( unsigned long int inCol )
- {
- int tttt = 0;
- double r = ( inCol >> 24 ) & 0xFF;
- double g = ( inCol >> 16 ) & 0xFF;
- double b = ( inCol >> 8 ) & 0xFF;
- double rl, gl, bl;
- rgb2lab( r, g, b, &rl, &gl, &bl );
- unsigned long int cout = inCol;
- int bout = 0;
- double cnum = pow( 255, 255 ) + pow( 255, 255 ) + pow( 255, 255 );
- unsigned long int tmp = 0xFFFFFFFF;
- for( int i = 0; cats[i] != 0; i ++ ){
- if( cats[i]->blockCount > 0 && cats[i]->enabled == true ){
- for( int j = 0; j < cats[i]->blockCount; j += 1 ){
- tttt += 1;
- BLOCKTYPE* ttt = blockLookup( cats[i]->blocks[j] );
- double tmp = sqr( ttt->labR - rl ) + sqr( ttt->labG - gl ) + sqr( ttt->labB - bl );
- if( abss( tmp ) < cnum ){
- cnum = abss( tmp );
- bout = cats[i]->blocks[j];
- cout = ttt->color;
- }
- }
- }
- }
- if( tttt == 0 ){
- bout = 0;
- }
- if( cout == 0 )
- return 0;
- return bout;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement