|  | #include <u.h> | 
|  | #include <libc.h> | 
|  | #include <draw.h> | 
|  |  | 
|  | /* | 
|  | * This version of closest() is now (feb 20, 2001) installed as rgb2cmap in libdraw | 
|  | */ | 
|  |  | 
|  | int | 
|  | closest(int cr, int cg, int cb) | 
|  | { | 
|  | int i, r, g, b, sq; | 
|  | ulong rgb; | 
|  | int best, bestsq; | 
|  |  | 
|  | best = 0; | 
|  | bestsq = 0x7FFFFFFF; | 
|  | for(i=0; i<256; i++){ | 
|  | rgb = cmap2rgb(i); | 
|  | r = (rgb>>16) & 0xFF; | 
|  | g = (rgb>>8) & 0xFF; | 
|  | b = (rgb>>0) & 0xFF; | 
|  | sq = (r-cr)*(r-cr)+(g-cg)*(g-cg)+(b-cb)*(b-cb); | 
|  | if(sq < bestsq){ | 
|  | bestsq = sq; | 
|  | best = i; | 
|  | } | 
|  | } | 
|  | return best; | 
|  | } | 
|  |  | 
|  | void | 
|  | main(int argc, char *argv[]) | 
|  | { | 
|  | int i, rgb; | 
|  | int r, g, b; | 
|  | uchar close[16*16*16]; | 
|  |  | 
|  | /* rgbmap */ | 
|  | print("uint rgbmap[256] = {\n"); | 
|  | for(i=0; i<256; i++){ | 
|  | if(i%8 == 0) | 
|  | print("\t"); | 
|  | rgb = cmap2rgb(i); | 
|  | r = (rgb>>16) & 0xFF; | 
|  | g = (rgb>>8) & 0xFF; | 
|  | b = (rgb>>0) & 0xFF; | 
|  | print("0x%.6ulX, ", (r<<16) | (g<<8) | b); | 
|  | if(i%8 == 7) | 
|  | print("\n"); | 
|  | } | 
|  | print("};\n\n"); | 
|  |  | 
|  | /* closestrgb */ | 
|  | print("uchar closestrgb[16*16*16] = {\n"); | 
|  | for(r=0; r<256; r+=16) | 
|  | for(g=0; g<256; g+=16) | 
|  | for(b=0; b<256; b+=16) | 
|  | close[(b/16)+16*((g/16)+16*(r/16))] = closest(r+8, g+8, b+8); | 
|  | for(i=0; i<16*16*16; i++){ | 
|  | if(i%16 == 0) | 
|  | print("\t"); | 
|  | print("%d,", close[i]); | 
|  | if(i%16 == 15) | 
|  | print("\n"); | 
|  | } | 
|  | print("};\n\n"); | 
|  | exits(nil); | 
|  | } |