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