Blob
1 #include <u.h>2 #include <libc.h>3 #include <draw.h>5 /*6 * This version of closest() is now (feb 20, 2001) installed as rgb2cmap in libdraw7 */9 int10 closest(int cr, int cg, int cb)11 {12 int i, r, g, b, sq;13 ulong rgb;14 int best, bestsq;16 best = 0;17 bestsq = 0x7FFFFFFF;18 for(i=0; i<256; i++){19 rgb = cmap2rgb(i);20 r = (rgb>>16) & 0xFF;21 g = (rgb>>8) & 0xFF;22 b = (rgb>>0) & 0xFF;23 sq = (r-cr)*(r-cr)+(g-cg)*(g-cg)+(b-cb)*(b-cb);24 if(sq < bestsq){25 bestsq = sq;26 best = i;27 }28 }29 return best;30 }32 void33 main(int argc, char *argv[])34 {35 int i, rgb;36 int r, g, b;37 uchar close[16*16*16];39 /* rgbmap */40 print("uint rgbmap[256] = {\n");41 for(i=0; i<256; i++){42 if(i%8 == 0)43 print("\t");44 rgb = cmap2rgb(i);45 r = (rgb>>16) & 0xFF;46 g = (rgb>>8) & 0xFF;47 b = (rgb>>0) & 0xFF;48 print("0x%.6ulX, ", (r<<16) | (g<<8) | b);49 if(i%8 == 7)50 print("\n");51 }52 print("};\n\n");54 /* closestrgb */55 print("uchar closestrgb[16*16*16] = {\n");56 for(r=0; r<256; r+=16)57 for(g=0; g<256; g+=16)58 for(b=0; b<256; b+=16)59 close[(b/16)+16*((g/16)+16*(r/16))] = closest(r+8, g+8, b+8);60 for(i=0; i<16*16*16; i++){61 if(i%16 == 0)62 print("\t");63 print("%d,", close[i]);64 if(i%16 == 15)65 print("\n");66 }67 print("};\n\n");68 exits(nil);69 }