Blame


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