diff --git a/src/modules/Image/image.c b/src/modules/Image/image.c index a2c31735acc6987d20d5ffe831fad3b01da742c6..7204cf11123fba0e3377ac3c60c7ec2bab7e96af 100644 --- a/src/modules/Image/image.c +++ b/src/modules/Image/image.c @@ -1,9 +1,9 @@ -/* $Id: image.c,v 1.166 2000/07/28 07:12:44 hubbe Exp $ */ +/* $Id: image.c,v 1.167 2000/08/05 11:07:30 grubba Exp $ */ /* **! module Image **! note -**! $Id: image.c,v 1.166 2000/07/28 07:12:44 hubbe Exp $ +**! $Id: image.c,v 1.167 2000/08/05 11:07:30 grubba Exp $ **! class Image **! **! The main object of the <ref>Image</ref> module, this object @@ -98,7 +98,7 @@ #include "stralloc.h" #include "global.h" -RCSID("$Id: image.c,v 1.166 2000/07/28 07:12:44 hubbe Exp $"); +RCSID("$Id: image.c,v 1.167 2000/08/05 11:07:30 grubba Exp $"); #include "pike_macros.h" #include "object.h" #include "constants.h" @@ -133,7 +133,7 @@ extern struct program *image_colortable_program; #define THIS ((struct image *)(Pike_fp->current_storage)) #define THISOBJ (Pike_fp->current_object) -#define testrange(x) ((COLORTYPE)MAXIMUM(MINIMUM(((int)x),255),0)) +#define testrange(x) ((COLORTYPE)MAXIMUM(MINIMUM(DOUBLE_TO_INT(x),255),0)) #define sq(x) ((x)*(x)) diff --git a/src/modules/Image/image.h b/src/modules/Image/image.h index f29d6e5384f073618ef6808d925ceb9115611afb..2ea90038d865a52625e641c3970e403e7f5bc752 100644 --- a/src/modules/Image/image.h +++ b/src/modules/Image/image.h @@ -1,7 +1,7 @@ /* **! module Image **! note -**! $Id: image.h,v 1.36 2000/06/02 05:02:29 per Exp $ +**! $Id: image.h,v 1.37 2000/08/05 11:07:31 grubba Exp $ */ #ifdef PIKE_IMAGE_IMAGE_H @@ -40,6 +40,21 @@ extern int image_cpuid; #define RGB_TO_RGBL(RGBL,RGB) (((RGBL).r=COLOR_TO_COLORL((RGB).r)),((RGBL).g=COLOR_TO_COLORL((RGB).g)),((RGBL).b=COLOR_TO_COLORL((RGB).b))) #define RGBL_TO_RGB(RGB,RGBL) (((RGB).r=COLORL_TO_COLOR((RGBL).r)),((RGB).g=COLORL_TO_COLOR((RGBL).g)),((RGB).b=COLORL_TO_COLOR((RGBL).b))) +/* Some marcos to avoid loss of precision warnings. */ +#ifdef __ECL +static inline int DOUBLE_TO_INT(double d) +{ + return (int)d; +} +static inline char DOUBLE_TO_CHAR(double d) +{ + return (char)d; +} +#else /* !__ECL */ +#define DOUBLE_TO_INT(D) ((int)(D)) +#define DOUBLE_TO_CHAR(D) ((char)(D)) +#endif /* __ECL */ + #define FS_SCALE 1024 diff --git a/src/modules/Image/layers.c b/src/modules/Image/layers.c index 789f15673d61d81888c7d8e2ee7a75a1d9fe7e55..b37ac76f8b1b657476786c5b8661a32222215688 100644 --- a/src/modules/Image/layers.c +++ b/src/modules/Image/layers.c @@ -1,7 +1,7 @@ /* **! module Image **! note -**! $Id: layers.c,v 1.45 2000/07/28 07:12:44 hubbe Exp $ +**! $Id: layers.c,v 1.46 2000/08/05 11:07:31 grubba Exp $ **! class Layer **! see also: layers **! @@ -215,7 +215,7 @@ #include <math.h> /* floor */ -RCSID("$Id: layers.c,v 1.45 2000/07/28 07:12:44 hubbe Exp $"); +RCSID("$Id: layers.c,v 1.46 2000/08/05 11:07:31 grubba Exp $"); #include "image_machine.h" @@ -536,11 +536,11 @@ struct layer_mode_desc #endif -#define COMBINE(P,A) CCUT(((int)(P))*(A)) +#define COMBINE(P,A) CCUT((DOUBLE_TO_INT(P))*(A)) #define COMBINE_A(P,A) ((COLORTYPE)((P)*(A))) #define COMBINE_V(P,V,A) CCUT((V)*(P)*(A)) -#define F2C(Z) ((COLORTYPE)(COLORMAX*(Z))) +#define F2C(Z) ((COLORTYPE)DOUBLE_TO_INT(COLORMAX*(Z))) #define ALPHA_ADD(S,L,D,SA,LA,DA,C) \ if (!(LA)->C) (D)->C=(S)->C,(DA)->C=(SA)->C; \ @@ -636,7 +636,7 @@ static INLINE void hsv_to_rgb(double h,double s,double v,rgb_group *colorp) #define q F2C(v * (1 - (s * f))) #define t F2C(v * (1 - (s * (1 -f)))) #define V F2C(v) - switch((int)i) + switch(DOUBLE_TO_INT(i)) { case 6: case 0: colorp->r = V; colorp->g = t; colorp->b = p; break; @@ -1381,7 +1381,7 @@ static void lm_normal(rgb_group *s,rgb_group *l,rgb_group *d, #define LM_FUNC lm_add #define L_TRUNC(X) MINIMUM(255,(X)) -#define L_OPER(A,B) ((A)+(int)(B)) +#define L_OPER(A,B) ((A)+DOUBLE_TO_INT(B)) #define L_MMX_OPER(A,MMXR) paddusb_m2r(A,MMXR) #include "layer_oper.h" #undef L_MMX_OPER @@ -1391,7 +1391,7 @@ static void lm_normal(rgb_group *s,rgb_group *l,rgb_group *d, #define LM_FUNC lm_subtract #define L_TRUNC(X) MAXIMUM(0,(X)) -#define L_OPER(A,B) ((A)-(int)(B)) +#define L_OPER(A,B) ((A)-DOUBLE_TO_INT(B)) #define L_MMX_OPER(A,MMXR) psubusb_m2r(A,MMXR) #include "layer_oper.h" #undef L_MMX_OPER @@ -1401,7 +1401,7 @@ static void lm_normal(rgb_group *s,rgb_group *l,rgb_group *d, #define LM_FUNC lm_multiply #define L_TRUNC(X) (X) -#define L_OPER(A,B) CCUT((A)*(int)(B)) +#define L_OPER(A,B) CCUT((A)*DOUBLE_TO_INT(B)) #include "layer_oper.h" #undef LM_FUNC #undef L_TRUNC @@ -1409,7 +1409,7 @@ static void lm_normal(rgb_group *s,rgb_group *l,rgb_group *d, #define LM_FUNC lm_divide #define L_TRUNC(X) MINIMUM(255,(X)) -#define L_OPER(A,B) ((A)/C2F(1+(int)(B))) +#define L_OPER(A,B) ((A)/C2F(1+DOUBLE_TO_INT(B))) #include "layer_oper.h" #undef LM_FUNC #undef L_TRUNC @@ -1427,7 +1427,7 @@ static void lm_normal(rgb_group *s,rgb_group *l,rgb_group *d, #define LM_FUNC lm_invsubtract #define L_TRUNC(X) MAXIMUM(0,(X)) -#define L_OPER(A,B) ((B)-(int)(A)) +#define L_OPER(A,B) ((B)-DOUBLE_TO_INT(A)) #include "layer_oper.h" #undef LM_FUNC #undef L_TRUNC @@ -1435,7 +1435,7 @@ static void lm_normal(rgb_group *s,rgb_group *l,rgb_group *d, #define LM_FUNC lm_invdivide #define L_TRUNC(X) MINIMUM(255,(X)) -#define L_OPER(A,B) ((B)/C2F(1+(int)(A))) +#define L_OPER(A,B) ((B)/C2F(1+DOUBLE_TO_INT(A))) #include "layer_oper.h" #undef LM_FUNC #undef L_TRUNC