URI:
       trgbrgbv.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       trgbrgbv.c (1236B)
       ---
            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 }