]> git.imager.perl.org - imager.git/blob - Flines/Flines.xs
4b9164bef2e03fbc752e75aa99e095e88b74a25a
[imager.git] / Flines / Flines.xs
1 #define PERL_NO_GET_CONTEXT
2 #ifdef __cplusplus
3 extern "C" {
4 #endif
5 #include "EXTERN.h"
6 #include "perl.h"
7 #include "XSUB.h"
8 #include "ppport.h"
9 #ifdef __cplusplus
10 }
11 #endif
12
13 #include "imext.h"
14 #include "imperl.h"
15
16 unsigned char
17 static
18 saturate(int in) {
19   if (in>255) { return 255; }
20   else if (in>0) return in;
21   return 0;
22 }
23
24
25
26 void
27 flines(i_img *im) {
28   i_color vl;
29   int x,y;
30   
31   for(y = 0; y < im->ysize; y ++) {
32     for(x = 0; x < im->xsize; x ++ ) {
33       i_gpix(im,x,y,&vl); 
34                         if (!(y%2)) {
35                                 float yf = y/(float)im->ysize;
36                                 float mf = 1.2-0.8*yf;
37                                 vl.rgb.r = saturate(vl.rgb.r*mf);
38                                 vl.rgb.g = saturate(vl.rgb.g*mf);
39                                 vl.rgb.b = saturate(vl.rgb.b*mf);
40                         } else {
41                                 float yf = (im->ysize-y)/(float)im->ysize;
42                                 float mf = 1.2-0.8*yf;
43                                 vl.rgb.r = saturate(vl.rgb.r*mf);
44                                 vl.rgb.g = saturate(vl.rgb.g*mf);
45                                 vl.rgb.b = saturate(vl.rgb.b*mf);
46                         } 
47      i_ppix(im,x,y,&vl); 
48     }
49   }
50 }
51
52
53 DEFINE_IMAGER_CALLBACKS;
54
55 MODULE = Imager::Filter::Flines   PACKAGE = Imager::Filter::Flines
56
57 PROTOTYPES: ENABLE
58
59 void
60 flines(im)
61         Imager::ImgRaw im
62
63 BOOT:
64         PERL_INITIALIZE_IMAGER_CALLBACKS;
65