X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=eradicate;a=blobdiff_plain;f=libs%2Fimago%2Fsrc%2Fconv.c;fp=libs%2Fimago%2Fsrc%2Fconv.c;h=501b3c4758ce9d1b61b89e2ffbf9e19adb458810;hp=51ecd1f19f26b5c7587bbbd4c28ed6670cfdb0b5;hb=03eaea2400647375400c3bc4d927c399e142a901;hpb=26db2e08470629e79e0afe76c2fcbb3b4e10a01d diff --git a/libs/imago/src/conv.c b/libs/imago/src/conv.c index 51ecd1f..501b3c4 100644 --- a/libs/imago/src/conv.c +++ b/libs/imago/src/conv.c @@ -32,6 +32,7 @@ struct pixel { static void unpack_grey8(struct pixel *unp, void *pptr, int count); static void unpack_rgb24(struct pixel *unp, void *pptr, int count); static void unpack_rgba32(struct pixel *unp, void *pptr, int count); +static void unpack_bgra32(struct pixel *unp, void *pptr, int count); static void unpack_greyf(struct pixel *unp, void *pptr, int count); static void unpack_rgbf(struct pixel *unp, void *pptr, int count); static void unpack_rgbaf(struct pixel *unp, void *pptr, int count); @@ -40,6 +41,7 @@ static void unpack_rgb565(struct pixel *unp, void *pptr, int count); static void pack_grey8(void *pptr, struct pixel *unp, int count); static void pack_rgb24(void *pptr, struct pixel *unp, int count); static void pack_rgba32(void *pptr, struct pixel *unp, int count); +static void pack_bgra32(void *pptr, struct pixel *unp, int count); static void pack_greyf(void *pptr, struct pixel *unp, int count); static void pack_rgbf(void *pptr, struct pixel *unp, int count); static void pack_rgbaf(void *pptr, struct pixel *unp, int count); @@ -50,6 +52,7 @@ static void (*unpack[])(struct pixel*, void*, int) = { unpack_grey8, unpack_rgb24, unpack_rgba32, + unpack_bgra32, unpack_greyf, unpack_rgbf, unpack_rgbaf, @@ -61,6 +64,7 @@ static void (*pack[])(void*, struct pixel*, int) = { pack_grey8, pack_rgb24, pack_rgba32, + pack_bgra32, pack_greyf, pack_rgbf, pack_rgbaf, @@ -145,6 +149,20 @@ static void unpack_rgba32(struct pixel *unp, void *pptr, int count) } } +static void unpack_bgra32(struct pixel *unp, void *pptr, int count) +{ + int i; + unsigned char *pix = pptr; + + for(i=0; ib = (float)*pix++ / 255.0; + unp->g = (float)*pix++ / 255.0; + unp->r = (float)*pix++ / 255.0; + unp->a = (float)*pix++ / 255.0; + unp++; + } +} + static void unpack_greyf(struct pixel *unp, void *pptr, int count) { int i; @@ -256,6 +274,25 @@ static void pack_rgba32(void *pptr, struct pixel *unp, int count) } } +static void pack_bgra32(void *pptr, struct pixel *unp, int count) +{ + int i; + unsigned char *pix = pptr; + + for(i=0; ir * 255.0); + int g = (int)(unp->g * 255.0); + int b = (int)(unp->b * 255.0); + int a = (int)(unp->a * 255.0); + + *pix++ = CLAMP(b, 0, 255); + *pix++ = CLAMP(g, 0, 255); + *pix++ = CLAMP(r, 0, 255); + *pix++ = CLAMP(a, 0, 255); + unp++; + } +} + static void pack_greyf(void *pptr, struct pixel *unp, int count) { int i;