1 #include "../lib9.h" 2 3 #include "../libdraw/draw.h" 4 5 int 6 rgb2cmap(int cr, int cg, int cb) 7 { 8 int r, g, b, v, cv; 9 10 if(cr < 0) 11 cr = 0; 12 else if(cr > 255) 13 cr = 255; 14 if(cg < 0) 15 cg = 0; 16 else if(cg > 255) 17 cg = 255; 18 if(cb < 0) 19 cb = 0; 20 else if(cb > 255) 21 cb = 255; 22 r = cr>>6; 23 g = cg>>6; 24 b = cb>>6; 25 cv = cr; 26 if(cg > cv) 27 cv = cg; 28 if(cb > cv) 29 cv = cb; 30 v = (cv>>4)&3; 31 return ((((r<<2)+v)<<4)+(((g<<2)+b+v-r)&15)); 32 } 33 34 int 35 cmap2rgb(int c) 36 { 37 int j, num, den, r, g, b, v, rgb; 38 39 r = c>>6; 40 v = (c>>4)&3; 41 j = (c-v+r)&15; 42 g = j>>2; 43 b = j&3; 44 den=r; 45 if(g>den) 46 den=g; 47 if(b>den) 48 den=b; 49 if(den==0) { 50 v *= 17; 51 rgb = (v<<16)|(v<<8)|v; 52 } 53 else{ 54 num=17*(4*den+v); 55 rgb = ((r*num/den)<<16)|((g*num/den)<<8)|(b*num/den); 56 } 57 return rgb; 58 } 59 60 int 61 cmap2rgba(int c) 62 { 63 return (cmap2rgb(c)<<8)|0xFF; 64 } 65