1 #include <u.h>
2 #include <libc.h>
3 #include <draw.h>
4 #include <memdraw.h>
5 #include <bio.h>
6 #include "imagefile.h"
7
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 */
10
11 static
12 int
notrans(ulong chan)13 notrans(ulong chan)
14 {
15 switch(chan){
16 case GREY1:
17 case GREY2:
18 case GREY4:
19 case GREY8:
20 case RGB24:
21 return 1;
22 }
23 return 0;
24 }
25
26 Image*
multichan(Image * i)27 multichan(Image *i)
28 {
29 Image *ni;
30
31 if(notrans(i->chan))
32 return i;
33
34 ni = allocimage(display, i->r, RGB24, 0, DNofill);
35 if(ni == nil)
36 return ni;
37 draw(ni, ni->r, i, nil, i->r.min);
38 return ni;
39 }
40
41 Memimage*
memmultichan(Memimage * i)42 memmultichan(Memimage *i)
43 {
44 Memimage *ni;
45
46 if(notrans(i->chan))
47 return i;
48
49 ni = allocmemimage(i->r, RGB24);
50 if(ni == nil)
51 return ni;
52 memimagedraw(ni, ni->r, i, i->r.min, nil, i->r.min, S);
53 return ni;
54 }
55