| #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); |
| } |