]> git.imager.perl.org - imager.git/blobdiff - bmp.c
Ticket #369 - writing grayscale images to GIF
[imager.git] / bmp.c
diff --git a/bmp.c b/bmp.c
index 533fdbc91b3de493bd0ebf925f95d2593622ec1b..286b3dc8ad3808b0ea0cd675b68f5b1624405870 100644 (file)
--- a/bmp.c
+++ b/bmp.c
@@ -278,7 +278,7 @@ write_packed(io_glue *ig, char *format, ...) {
       break;
 
     default:
-      m_fatal(1, "Unknown read_packed format code 0x%02x", *format);
+      m_fatal(1, "Unknown write_packed format code 0x%02x", *format);
     }
     ++format;
   }
@@ -432,6 +432,8 @@ write_1bit_data(io_glue *ig, i_img *im) {
   myfree(packed);
   myfree(line);
 
+  ig->closecb(ig);
+
   return 1;
 }
 
@@ -480,6 +482,8 @@ write_4bit_data(io_glue *ig, i_img *im) {
   myfree(packed);
   myfree(line);
 
+  ig->closecb(ig);
+
   return 1;
 }
 
@@ -517,6 +521,8 @@ write_8bit_data(io_glue *ig, i_img *im) {
   }
   myfree(line);
 
+  ig->closecb(ig);
+
   return 1;
 }
 
@@ -545,6 +551,7 @@ write_24bit_data(io_glue *ig, i_img *im) {
     return 0;
   chans = im->channels >= 3 ? bgr_chans : grey_chans;
   samples = mymalloc(line_size);
+  memset(samples, 0, line_size);
   for (y = im->ysize-1; y >= 0; --y) {
     i_gsamp(im, 0, im->xsize, y, samples, chans, 3);
     if (ig->writecb(ig, samples, line_size) < 0) {
@@ -555,6 +562,8 @@ write_24bit_data(io_glue *ig, i_img *im) {
   }
   myfree(samples);
 
+  ig->closecb(ig);
+
   return 1;
 }
 
@@ -654,6 +663,8 @@ read_1bit_bmp(io_glue *ig, int xsize, int ysize, int clr_used) {
     y += yinc;
   }
 
+  myfree(packed);
+  myfree(line);
   return im;
 }
 
@@ -726,6 +737,8 @@ read_4bit_bmp(io_glue *ig, int xsize, int ysize, int clr_used,
       i_ppal(im, 0, xsize, y, line);
       y += yinc;
     }
+    myfree(packed);
+    myfree(line);
   }
   else if (compression == BI_RLE4) {
     int read_size;
@@ -861,6 +874,7 @@ read_8bit_bmp(io_glue *ig, int xsize, int ysize, int clr_used,
       i_ppal(im, 0, xsize, y, line);
       y += yinc;
     }
+    myfree(line);
   }
   else if (compression == BI_RLE8) {
     int read_size;
@@ -991,7 +1005,6 @@ read_direct_bmp(io_glue *ig, int xsize, int ysize, int bit_count,
     lasty = ysize;
     yinc = 1;
   }
-  line = mymalloc(line_size);
   if (compression == BI_RGB) {
     masks = std_masks[pix_size-2];