| #include <u.h> | 
 | #include <libc.h> | 
 | #include <draw.h> | 
 | #include <memdraw.h> | 
 | #include <bio.h> | 
 | #include "imagefile.h" | 
 |  | 
 | /* Separate colors, if not a grey scale or bitmap, into one byte per color per pixel, no alpha or X */ | 
 | /* Result is GREY[1248] or RGB24 */ | 
 |  | 
 | int drawlog2[] = { | 
 | 	0, 0, 1, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, | 
 | 	4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 
 | 	5 | 
 | }; | 
 |  | 
 | static | 
 | int | 
 | notrans(ulong chan) | 
 | { | 
 | 	switch(chan){ | 
 | 	case GREY1: | 
 | 	case GREY2: | 
 | 	case GREY4: | 
 | 	case GREY8: | 
 | 	case RGB24: | 
 | 		return 1; | 
 | 	} | 
 | 	return 0; | 
 | } | 
 |  | 
 | Image* | 
 | multichan(Image *i) | 
 | { | 
 | 	Image *ni; | 
 |  | 
 | 	if(notrans(i->chan)) | 
 | 		return i; | 
 |  | 
 | 	ni = allocimage(display, i->r, RGB24, 0, DNofill); | 
 | 	if(ni == nil) | 
 | 		return ni; | 
 | 	draw(ni, ni->r, i, nil, i->r.min); | 
 | 	return ni; | 
 | } | 
 |  | 
 | Memimage* | 
 | memmultichan(Memimage *i) | 
 | { | 
 | 	Memimage *ni; | 
 |  | 
 | 	if(notrans(i->chan)) | 
 | 		return i; | 
 |  | 
 | 	ni = allocmemimage(i->r, RGB24); | 
 | 	if(ni == nil) | 
 | 		return ni; | 
 | 	memimagedraw(ni, ni->r, i, i->r.min, nil, i->r.min, S); | 
 | 	return ni; | 
 | } |