plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

rgbrgbv.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 }