From 8a9c530eeea07cfeabac7a45f12ce1d9116c3d63 Mon Sep 17 00:00:00 2001
From: "Mirar (Pontus Hagland)" <pike@sort.mirar.org>
Date: Mon, 22 Mar 1999 10:33:42 +0100
Subject: [PATCH] support encoding of (some) BMP's

Rev: src/modules/Image/colortable.c:1.52
Rev: src/modules/Image/colortable.h:1.12
Rev: src/modules/Image/encodings/Makefile.in:1.17
Rev: src/modules/Image/image.c:1.116
---
 src/modules/Image/colortable.c          | 65 +++++++++++++++++++++++--
 src/modules/Image/colortable.h          |  8 ++-
 src/modules/Image/encodings/Makefile.in |  4 +-
 src/modules/Image/image.c               | 10 ++--
 4 files changed, 78 insertions(+), 9 deletions(-)

diff --git a/src/modules/Image/colortable.c b/src/modules/Image/colortable.c
index 3f86379d24..506f3821fe 100644
--- a/src/modules/Image/colortable.c
+++ b/src/modules/Image/colortable.c
@@ -1,12 +1,12 @@
 #include "global.h"
 #include <config.h>
 
-/* $Id: colortable.c,v 1.51 1999/03/19 18:21:47 mirar Exp $ */
+/* $Id: colortable.c,v 1.52 1999/03/22 09:33:37 mirar Exp $ */
 
 /*
 **! module Image
 **! note
-**!	$Id: colortable.c,v 1.51 1999/03/19 18:21:47 mirar Exp $
+**!	$Id: colortable.c,v 1.52 1999/03/22 09:33:37 mirar Exp $
 **! class colortable
 **!
 **!	This object keeps colortable information,
@@ -21,7 +21,7 @@
 #undef COLORTABLE_DEBUG
 #undef COLORTABLE_REDUCE_DEBUG
 
-RCSID("$Id: colortable.c,v 1.51 1999/03/19 18:21:47 mirar Exp $");
+RCSID("$Id: colortable.c,v 1.52 1999/03/22 09:33:37 mirar Exp $");
 
 #include <math.h> /* fabs() */
 
@@ -911,6 +911,9 @@ static struct nct_flat _img_get_flat_from_string(struct pike_string *str)
    int i;
 
    flat.numentries=str->len/3;
+   if (flat.numentries<1) 
+      error("Can't make a colortable with less then one (1) color.\n");
+
    flat.entries=(struct nct_flat_entry*)
       xalloc(flat.numentries*sizeof(struct nct_flat_entry));
 
@@ -2392,6 +2395,62 @@ void image_colortable_write_rgb(struct neo_colortable *nct,
       free(flat.entries);
 }
 
+void image_colortable_write_rgba(struct neo_colortable *nct,
+				 unsigned char *dest)
+{
+   struct nct_flat flat;
+   int i;
+   
+   if (nct->type==NCT_NONE)
+      return;
+
+   if (nct->type==NCT_CUBE)
+      flat=_img_nct_cube_to_flat(nct->u.cube);
+   else
+      flat=nct->u.flat;
+
+   /* sort in number order? */
+
+   for (i=0; i<flat.numentries; i++)
+   {
+      *(dest++)=flat.entries[i].color.r;
+      *(dest++)=flat.entries[i].color.g;
+      *(dest++)=flat.entries[i].color.b;
+      *(dest++)=0;
+   }
+
+   if (nct->type==NCT_CUBE)
+      free(flat.entries);
+}
+
+void image_colortable_write_bgra(struct neo_colortable *nct,
+				 unsigned char *dest)
+{
+   struct nct_flat flat;
+   int i;
+   
+   if (nct->type==NCT_NONE)
+      return;
+
+   if (nct->type==NCT_CUBE)
+      flat=_img_nct_cube_to_flat(nct->u.cube);
+   else
+      flat=nct->u.flat;
+
+   /* sort in number order? */
+
+   for (i=0; i<flat.numentries; i++)
+   {
+      *(dest++)=flat.entries[i].color.b;
+      *(dest++)=flat.entries[i].color.g;
+      *(dest++)=flat.entries[i].color.r;
+      *(dest++)=0;
+   }
+
+   if (nct->type==NCT_CUBE)
+      free(flat.entries);
+}
+
 void image_colortable_cast_to_string(struct neo_colortable *nct)
 {
    struct pike_string *str;
diff --git a/src/modules/Image/colortable.h b/src/modules/Image/colortable.h
index cfc5953381..0818584d1f 100644
--- a/src/modules/Image/colortable.h
+++ b/src/modules/Image/colortable.h
@@ -1,7 +1,7 @@
 /*
 **! module Image
 **! note
-**!	$Id: colortable.h,v 1.11 1998/01/08 16:57:05 mirar Exp $
+**!	$Id: colortable.h,v 1.12 1999/03/22 09:33:39 mirar Exp $
 */
 
 #ifdef PIKE_IMAGE_COLORTABLE_H
@@ -187,6 +187,12 @@ int image_colortable_size(struct neo_colortable *nct);
 void image_colortable_write_rgb(struct neo_colortable *nct,
 				unsigned char *dest);
 
+void image_colortable_write_rgba(struct neo_colortable *nct,
+				 unsigned char *dest);
+
+void image_colortable_write_bgra(struct neo_colortable *nct,
+				 unsigned char *dest);
+
 int image_colortable_initiate_dither(struct neo_colortable *nct,
 /* 0 upon out of memory */	     struct nct_dither *dith,
 				     int rowlen);
diff --git a/src/modules/Image/encodings/Makefile.in b/src/modules/Image/encodings/Makefile.in
index 063efe53df..8d5dd21582 100644
--- a/src/modules/Image/encodings/Makefile.in
+++ b/src/modules/Image/encodings/Makefile.in
@@ -1,7 +1,7 @@
-# $Id: Makefile.in,v 1.16 1999/02/24 03:18:07 mirar Exp $
+# $Id: Makefile.in,v 1.17 1999/03/22 09:33:42 mirar Exp $
 SRCDIR=@srcdir@
 VPATH=@srcdir@:@srcdir@/../../..:../../..
-OBJS = gif.o gif_lzw.o  pnm.o x.o xwd.o png.o any.o
+OBJS = gif.o gif_lzw.o  pnm.o x.o xwd.o png.o any.o bmp.o
 
 @SET_MAKE@
 
diff --git a/src/modules/Image/image.c b/src/modules/Image/image.c
index 5ac425c325..bc9a6c937d 100644
--- a/src/modules/Image/image.c
+++ b/src/modules/Image/image.c
@@ -1,9 +1,9 @@
-/* $Id: image.c,v 1.115 1999/03/03 04:49:32 mirar Exp $ */
+/* $Id: image.c,v 1.116 1999/03/22 09:33:40 mirar Exp $ */
 
 /*
 **! module Image
 **! note
-**!	$Id: image.c,v 1.115 1999/03/03 04:49:32 mirar Exp $
+**!	$Id: image.c,v 1.116 1999/03/22 09:33:40 mirar Exp $
 **! class image
 **!
 **!	The main object of the <ref>Image</ref> module, this object
@@ -97,7 +97,7 @@
 
 #include "stralloc.h"
 #include "global.h"
-RCSID("$Id: image.c,v 1.115 1999/03/03 04:49:32 mirar Exp $");
+RCSID("$Id: image.c,v 1.116 1999/03/22 09:33:40 mirar Exp $");
 #include "pike_macros.h"
 #include "object.h"
 #include "constants.h"
@@ -3470,6 +3470,8 @@ extern void init_image_gif(void);
 extern void exit_image_gif(void);
 extern void init_image_pnm(void);
 extern void exit_image_pnm(void);
+extern void init_image_bmp(void);
+extern void exit_image_bmp(void);
 extern void init_image_xwd(void);
 extern void exit_image_xwd(void);
 extern void init_image_x(void);
@@ -3832,6 +3834,7 @@ void pike_module_init(void)
 
    init_image_gif();
    init_image_pnm();
+   init_image_bmp();
    init_image_xwd();
    init_image_any();
    init_image_x();
@@ -3850,6 +3853,7 @@ void pike_module_exit(void)
 
    exit_image_gif();
    exit_image_pnm();
+   exit_image_bmp();
    exit_image_xwd();
    exit_image_any();
    if (png_object) 
-- 
GitLab