Blob
1 #include <u.h>2 #include <libc.h>3 #include <draw.h>4 #include <memdraw.h>5 #include <bio.h>6 #include "imagefile.h"8 /* Separate colors, if not a grey scale or bitmap, into one byte per color per pixel, no alpha or X */9 /* Result is GREY[1248] or RGB24 */11 int drawlog2[] = {12 0, 0, 1, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,13 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,14 515 };17 static18 int19 notrans(ulong chan)20 {21 switch(chan){22 case GREY1:23 case GREY2:24 case GREY4:25 case GREY8:26 case RGB24:27 return 1;28 }29 return 0;30 }32 Image*33 multichan(Image *i)34 {35 Image *ni;37 if(notrans(i->chan))38 return i;40 ni = allocimage(display, i->r, RGB24, 0, DNofill);41 if(ni == nil)42 return ni;43 draw(ni, ni->r, i, nil, i->r.min);44 return ni;45 }47 Memimage*48 memmultichan(Memimage *i)49 {50 Memimage *ni;52 if(notrans(i->chan))53 return i;55 ni = allocmemimage(i->r, RGB24);56 if(ni == nil)57 return ni;58 memimagedraw(ni, ni->r, i, i->r.min, nil, i->r.min, S);59 return ni;60 }