]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/jpg/rgbrgbv.c
cwfs: back to previous version
[plan9front.git] / sys / src / cmd / jpg / rgbrgbv.c
1 #include <u.h>
2 #include <libc.h>
3 #include <draw.h>
4
5 /*
6  * This version of closest() is now (feb 20, 2001) installed as rgb2cmap in libdraw
7  */
8
9 int
10 closest(int cr, int cg, int cb)
11 {
12         int i, r, g, b, sq;
13         ulong rgb;
14         int best, bestsq;
15
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 }
31
32 void
33 main(int argc, char *argv[])
34 {
35         int i, rgb;
36         int r, g, b;
37         uchar close[16*16*16];
38
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");
53
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 }