12 closest(int Y, int Cb, int Cr)
16 int rgb, R, G, B, v, i;
24 //print("YCbCr: %d %d %d, RGB: %g %g %g\n", Y, Cb, Cr, r, g, b);
30 R = (rgb >> 16) & 0xFF;
31 G = (rgb >> 8) & 0xFF;
32 B = (rgb >> 0) & 0xFF;
33 diff = (R-r)*(R-r) + (G-g)*(G-g) + (B-b)*(B-b);
34 // y1 = 0.5870*G + 0.114*B + 0.299*R;
35 // cb1 = (B-y1)/1.772;
36 // cr1 = (R-y1)/1.402;
40 // if(Y==256-16 && y1<256-16)
42 // if(Cb==0 && cb1!=0)
44 // if(Cb==256-16 && cb1<256-16)
46 // if(Cr==0 && cr1!=0)
48 // if(Cr==256-16 && cr1<256-16)
50 //print("%d %d %d\n", R, G, B);
61 #define INC (1<<SHIFT)
63 typedef struct Color Color;
71 Color *col[INC*INC*INC];
74 add(int c, int y, int cb, int cr)
81 cp = col[cr+INC*(cb+INC*y)];
87 cp = malloc(sizeof(Color));
89 cp->next = col[cr+INC*(cb+INC*y)];
90 col[cr+INC*(cb+INC*y)] = cp;
100 for(cb=0; cb<256; cb++)
101 for(cr=0;cr<256;cr++)
102 add(closest(y, cb, cr), y, cb, cr);
103 fprint(2, "%d done\n", y);
105 for(y=0; y<INC*INC*INC; y++){
115 print("%d ", cp->col);