17dd7cddfSDavid du Colombier #include <u.h>
27dd7cddfSDavid du Colombier #include <libc.h>
37dd7cddfSDavid du Colombier #include <draw.h>
47dd7cddfSDavid du Colombier #include <memdraw.h>
57dd7cddfSDavid du Colombier #include <bio.h>
67dd7cddfSDavid du Colombier #include "imagefile.h"
77dd7cddfSDavid du Colombier
87dd7cddfSDavid du Colombier /* Separate colors, if not a grey scale or bitmap, into one byte per color per pixel, no alpha or X */
97dd7cddfSDavid du Colombier /* Result is GREY[1248] or RGB24 */
107dd7cddfSDavid du Colombier
117dd7cddfSDavid du Colombier static
127dd7cddfSDavid du Colombier int
notrans(ulong chan)137dd7cddfSDavid du Colombier notrans(ulong chan)
147dd7cddfSDavid du Colombier {
157dd7cddfSDavid du Colombier switch(chan){
167dd7cddfSDavid du Colombier case GREY1:
177dd7cddfSDavid du Colombier case GREY2:
187dd7cddfSDavid du Colombier case GREY4:
197dd7cddfSDavid du Colombier case GREY8:
207dd7cddfSDavid du Colombier case RGB24:
217dd7cddfSDavid du Colombier return 1;
227dd7cddfSDavid du Colombier }
237dd7cddfSDavid du Colombier return 0;
247dd7cddfSDavid du Colombier }
257dd7cddfSDavid du Colombier
267dd7cddfSDavid du Colombier Image*
multichan(Image * i)277dd7cddfSDavid du Colombier multichan(Image *i)
287dd7cddfSDavid du Colombier {
297dd7cddfSDavid du Colombier Image *ni;
307dd7cddfSDavid du Colombier
317dd7cddfSDavid du Colombier if(notrans(i->chan))
327dd7cddfSDavid du Colombier return i;
337dd7cddfSDavid du Colombier
347dd7cddfSDavid du Colombier ni = allocimage(display, i->r, RGB24, 0, DNofill);
357dd7cddfSDavid du Colombier if(ni == nil)
367dd7cddfSDavid du Colombier return ni;
377dd7cddfSDavid du Colombier draw(ni, ni->r, i, nil, i->r.min);
387dd7cddfSDavid du Colombier return ni;
397dd7cddfSDavid du Colombier }
407dd7cddfSDavid du Colombier
417dd7cddfSDavid du Colombier Memimage*
memmultichan(Memimage * i)427dd7cddfSDavid du Colombier memmultichan(Memimage *i)
437dd7cddfSDavid du Colombier {
447dd7cddfSDavid du Colombier Memimage *ni;
457dd7cddfSDavid du Colombier
467dd7cddfSDavid du Colombier if(notrans(i->chan))
477dd7cddfSDavid du Colombier return i;
487dd7cddfSDavid du Colombier
497dd7cddfSDavid du Colombier ni = allocmemimage(i->r, RGB24);
507dd7cddfSDavid du Colombier if(ni == nil)
517dd7cddfSDavid du Colombier return ni;
52*6a9fc400SDavid du Colombier memimagedraw(ni, ni->r, i, i->r.min, nil, i->r.min, S);
537dd7cddfSDavid du Colombier return ni;
547dd7cddfSDavid du Colombier }
55