pike.git
/
src
/
modules
/
Image
/
phase.h
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/src/modules/Image/phase.h:1:
+
/* This file is incuded in search.c with the following defines set:
+
NEIG is 1, zx, zx+1 or zx-1
+
IMAGE_PHASE image_phase(h|v|hv|vh) Name of the function
+
*/
+
+
void IMAGE_PHASE(INT32 args)
+
{
+
struct object *o;
+
struct image *img,
+
*this;
+
rgb_group *imgi=0,*thisi=0;
+
+
int y, x; /* for this & img */
+
int yz, xz; /* for this & img */
+
int ys, xs; /* for this & img */
+
+
if (!THIS->img) { error("no image\n"); return; }
+
this=THIS;
+
thisi=this->img;
+
+
+
push_int(this->xsize);
+
push_int(this->ysize);
+
o=clone_object(image_program,2);
+
img=(struct image*)get_storage(o,image_program);
+
imgi=img->img;
+
+
pop_n_elems(args);
+
+
THREADS_ALLOW();
+
xz=this->xsize;
+
yz=this->ysize;
+
+
xs=this->xsize-1;
+
ys=this->ysize-1;
+
+
+
#define DALOOP(R) \
+
for(y=1; y<ys; y++) \
+
for(x=1; x<xs; x++) \
+
{\
+
int i;\
+
int V,H;\
+
i=y*xs+x;\
+
V=thisi[i-(NEIG)].R-thisi[i].R;\
+
H=thisi[i+(NEIG)].R-thisi[i].R;\
+
if ((V==0)&&(H==0))\
+
{\
+
/*\
+
In this case a check to see what there are at the sides \
+
should be done\
+
*/\
+
imgi[i].R=0;\
+
}\
+
else \
+
{\
+
if (V==0) imgi[i].R=32;\
+
else if (H==0) imgi[i].R=256-32;\
+
else\
+
{\
+
if (abs(V)>abs(H))\
+
if (V<0)\
+
imgi[i].R=(char)(0.5+224+(((float)H)/\
+
(0-V))*32.0);\
+
else\
+
imgi[i].R=(char)(0.5+96+(((float)H)/\
+
(V))*32.0);\
+
else\
+
if (H<0)\
+
imgi[i].R=(char)(0.5+32+(((float)V)/\
+
(0-H))*32.0);\
+
else\
+
imgi[i].R=(char)(0.5+160+(((float)V)/\
+
(H))*32.0);\
+
}\
+
}\
+
}
+
+
DALOOP(r)
+
DALOOP(g)
+
DALOOP(b)
+
+
#undef DALOOP
+
+
THREADS_DISALLOW();
+
+
o->refs++;
+
push_object(o);
+
}
+
Newline at end of file added.