]> git.imager.perl.org - imager.git/blobdiff - maskimg.c
binmode lib/Imager/APIRef.pod to avoid diffs from line endings
[imager.git] / maskimg.c
index 80397110b2cb916f0c56b92c072c33e6c5a39894..a0b9047796290963b6eb755440f6789eb4b64a98 100644 (file)
--- a/maskimg.c
+++ b/maskimg.c
@@ -11,8 +11,8 @@ maskimg.c - implements masked images/image subsets
 =cut
 */
 
-#include "image.h"
-#include "imagei.h"
+#include "imager.h"
+#include "imageri.h"
 
 #include <stdio.h>
 /*
@@ -34,20 +34,20 @@ typedef struct {
 #define MASKEXT(im) ((i_img_mask_ext *)((im)->ext_data))
 
 static void i_destroy_masked(i_img *im);
-static int i_ppix_masked(i_img *im, int x, int y, i_color *pix);
-static int i_ppixf_masked(i_img *im, int x, int y, i_fcolor *pix);
-static int i_plin_masked(i_img *im, int l, int r, int y, i_color *vals);
-static int i_plinf_masked(i_img *im, int l, int r, int y, i_fcolor *vals);
+static int i_ppix_masked(i_img *im, int x, int y, const i_color *pix);
+static int i_ppixf_masked(i_img *im, int x, int y, const i_fcolor *pix);
+static int i_plin_masked(i_img *im, int l, int r, int y, const i_color *vals);
+static int i_plinf_masked(i_img *im, int l, int r, int y, const i_fcolor *vals);
 static int i_gpix_masked(i_img *im, int x, int y, i_color *pix);
 static int i_gpixf_masked(i_img *im, int x, int y, i_fcolor *pix);
 static int i_glin_masked(i_img *im, int l, int r, int y, i_color *vals);
 static int i_glinf_masked(i_img *im, int l, int r, int y, i_fcolor *vals);
 static int i_gsamp_masked(i_img *im, int l, int r, int y, i_sample_t *samp, 
-                          int *chans, int chan_count);
+                          int const *chans, int chan_count);
 static int i_gsampf_masked(i_img *im, int l, int r, int y, i_fsample_t *samp, 
-                           int *chans, int chan_count);
+                           int const *chans, int chan_count);
 static int i_gpal_masked(i_img *im, int l, int r, int y, i_palidx *vals);
-static int i_ppal_masked(i_img *im, int l, int r, int y, i_palidx *vals);
+static int i_ppal_masked(i_img *im, int l, int r, int y, const i_palidx *vals);
 
 /*
 =item IIM_base_masked
@@ -60,7 +60,7 @@ static i_img IIM_base_masked =
 {
   0, /* channels set */
   0, 0, 0, /* xsize, ysize, bytes */
-  ~0, /* ch_mask */
+  ~0U, /* ch_mask */
   i_8_bits, /* bits */
   i_palette_type, /* type */
   1, /* virtual */
@@ -168,7 +168,7 @@ static void i_destroy_masked(i_img *im) {
 }
 
 /*
-=item i_ppix_masked(i_img *im, int x, int y, i_color *pix)
+=item i_ppix_masked(i_img *im, int x, int y, const i_color *pix)
 
 Write a pixel to a masked image.
 
@@ -176,7 +176,7 @@ Internal function.
 
 =cut
 */
-static int i_ppix_masked(i_img *im, int x, int y, i_color *pix) {
+static int i_ppix_masked(i_img *im, int x, int y, const i_color *pix) {
   i_img_mask_ext *ext = MASKEXT(im);
   int result;
 
@@ -194,7 +194,7 @@ static int i_ppix_masked(i_img *im, int x, int y, i_color *pix) {
 }
 
 /*
-=item i_ppixf_masked(i_img *im, int x, int y, i_fcolor *pix)
+=item i_ppixf_masked(i_img *im, int x, int y, const i_fcolor *pix)
 
 Write a pixel to a masked image.
 
@@ -202,7 +202,7 @@ Internal function.
 
 =cut
 */
-static int i_ppixf_masked(i_img *im, int x, int y, i_fcolor *pix) {
+static int i_ppixf_masked(i_img *im, int x, int y, const i_fcolor *pix) {
   i_img_mask_ext *ext = MASKEXT(im);
   int result;
 
@@ -220,7 +220,7 @@ static int i_ppixf_masked(i_img *im, int x, int y, i_fcolor *pix) {
 }
 
 /*
-=item i_plin_masked(i_img *im, int l, int r, int y, i_color *vals)
+=item i_plin_masked(i_img *im, int l, int r, int y, const i_color *vals)
 
 Write a row of data to a masked image.
 
@@ -228,9 +228,8 @@ Internal function.
 
 =cut
 */
-static int i_plin_masked(i_img *im, int l, int r, int y, i_color *vals) {
+static int i_plin_masked(i_img *im, int l, int r, int y, const i_color *vals) {
   i_img_mask_ext *ext = MASKEXT(im);
-  int result;
 
   if (y >= 0 && y < im->ysize && l < im->xsize && l >= 0) {
     if (r > im->xsize)
@@ -243,7 +242,7 @@ static int i_plin_masked(i_img *im, int l, int r, int y, i_color *vals) {
 
       i_gsamp(ext->mask, l, r, y, samps, NULL, 1);
       if (w < 10)
-        simple = 0;
+        simple = 1;
       else {
         /* the idea is to make a fast scan to see how often the state
            changes */
@@ -299,7 +298,7 @@ static int i_plin_masked(i_img *im, int l, int r, int y, i_color *vals) {
 }
 
 /*
-=item i_plinf_masked(i_img *im, int l, int r, int y, i_fcolor *vals)
+=item i_plinf_masked(i_img *im, int l, int r, int y, const i_fcolor *vals)
 
 Write a row of data to a masked image.
 
@@ -307,7 +306,7 @@ Internal function.
 
 =cut
 */
-static int i_plinf_masked(i_img *im, int l, int r, int y, i_fcolor *vals) {
+static int i_plinf_masked(i_img *im, int l, int r, int y, const i_fcolor *vals) {
   i_img_mask_ext *ext = MASKEXT(im);
   if (y >= 0 && y < im->ysize && l < im->xsize && l >= 0) {
     if (r > im->xsize)
@@ -320,7 +319,7 @@ static int i_plinf_masked(i_img *im, int l, int r, int y, i_fcolor *vals) {
 
       i_gsamp(ext->mask, l, r, y, samps, NULL, 1);
       if (w < 10)
-        simple = 0;
+        simple = 1;
       else {
         /* the idea is to make a fast scan to see how often the state
            changes */
@@ -438,7 +437,7 @@ static int i_glinf_masked(i_img *im, int l, int r, int y, i_fcolor *vals) {
 }
 
 static int i_gsamp_masked(i_img *im, int l, int r, int y, i_sample_t *samp, 
-                          int *chans, int chan_count) {
+                          int const *chans, int chan_count) {
   i_img_mask_ext *ext = MASKEXT(im);
   if (y >= 0 && y < im->ysize && l < im->xsize && l >= 0) {
     if (r > im->xsize)
@@ -452,7 +451,7 @@ static int i_gsamp_masked(i_img *im, int l, int r, int y, i_sample_t *samp,
 }
 
 static int i_gsampf_masked(i_img *im, int l, int r, int y, i_fsample_t *samp, 
-                          int *chans, int chan_count) {
+                          int const *chans, int chan_count) {
   i_img_mask_ext *ext = MASKEXT(im);
   if (y >= 0 && y < im->ysize && l < im->xsize && l >= 0) {
     if (r > im->xsize)
@@ -478,7 +477,7 @@ static int i_gpal_masked(i_img *im, int l, int r, int y, i_palidx *vals) {
   }
 }
 
-static int i_ppal_masked(i_img *im, int l, int r, int y, i_palidx *vals) {
+static int i_ppal_masked(i_img *im, int l, int r, int y, const i_palidx *vals) {
   i_img_mask_ext *ext = MASKEXT(im);
   if (y >= 0 && y < im->ysize && l < im->xsize && l >= 0) {
     if (r > im->xsize)
@@ -489,6 +488,7 @@ static int i_ppal_masked(i_img *im, int l, int r, int y, i_palidx *vals) {
       int w = r - l;
       int start;
       
+      i_gsamp(ext->mask, l, r, y, samps, NULL, 1);
       i = 0;
       while (i < w) {
         while (i < w && !samps[i])
@@ -512,3 +512,17 @@ static int i_ppal_masked(i_img *im, int l, int r, int y, i_palidx *vals) {
   }
 }
 
+
+/*
+=back
+
+=head1 AUTHOR
+
+Tony Cook <tony@develop-help.com>
+
+=head1 SEE ALSO
+
+Imager(3)
+
+=cut
+*/