diff --git a/lib/modules/_Image_PSD.pmod b/lib/modules/_Image_PSD.pmod index 70388180bd7d600ccb5d1dcb90897c6a0effa041..e1d759596eedad094fa642be824ad8911500ebc9 100644 --- a/lib/modules/_Image_PSD.pmod +++ b/lib/modules/_Image_PSD.pmod @@ -91,6 +91,7 @@ Layer decode_layer(mapping layer, mapping i) ({0,255,0,}), ({0,0,255,}), }) + ({ 255,255,255 }) * 24; + l->image = Image.image( l->width, l->height, 255, 255, 255); break; case Indexed: use_cmap = 1; @@ -198,7 +199,7 @@ array(object) decode_background( mapping data, array bg ) mapping _decode( string|mapping what, mapping|void opts ) { mapping data; -mixed e =catch{ +// mixed e =catch{ if(!opts) opts = ([]); if(mappingp(what)) data = what; @@ -211,7 +212,7 @@ mixed e =catch{ foreach(reverse(data->layers), object l) { - if((l->flags & LAYER_FLAG_VISIBLE) || opts->draw_all_layers) +// if((l->flags & LAYER_FLAG_VISIBLE) || opts->draw_all_layers) { Layer h = l->get_opaqued( l->opacity ); @@ -256,6 +257,6 @@ mixed e =catch{ "image":img, "alpha":alpha, ]); -}; - werror(describe_backtrace(e)); +// }; +// werror(describe_backtrace(e)); } diff --git a/src/modules/Image/encodings/psd.c b/src/modules/Image/encodings/psd.c index 61fb3719824b80212e87eea5dcf851a5bdc7d009..fffa845187545fb01635159e7592272cd60603d8 100644 --- a/src/modules/Image/encodings/psd.c +++ b/src/modules/Image/encodings/psd.c @@ -1,5 +1,5 @@ #include "global.h" -RCSID("$Id: psd.c,v 1.5 1999/04/17 01:25:48 per Exp $"); +RCSID("$Id: psd.c,v 1.6 1999/04/22 01:41:40 per Exp $"); #include "config.h" @@ -35,6 +35,7 @@ extern struct program *image_program; */ #define MIN(X,Y) ((X)<(Y)?(X):(Y)) +#define MAX(X,Y) ((X)>(Y)?(X):(Y)) #define STRING(X) static struct pike_string *s_##X; #include "psd_constant_strings.h" #undef STRING @@ -430,28 +431,22 @@ static void f_decode_image_data( INT32 args ) { case 4: /* cmyk.. */ - dst->r = dst->g = dst->b = 255; - dst->r -= *(source++); - dst->g -= *(source2++); - dst->b -= *(source3++); - if(dst->r > *source4) - dst->r -= *source4; - else - dst->r = 0; - if(dst->g > *source4) - dst->g -= *source4; - else - dst->g = 0; - if(dst->b > *source4) - dst->b -= *source4; - else - dst->b = 0; - source4++; + dst->r = MAX(255-(*(source++) + *source4), 0); + dst->g = MAX(255-(*(source2++) + *source4), 0); + dst->b = MAX(255-(*(source3++) + *source4), 0); + dst++; source4++; break; case 3: - dst->r = *(source++); - dst->g = *(source2++); - (dst++)->b = *(source3++); + if( m != CMYK ) + { + dst->r = *(source++); + dst->g = *(source2++); + (dst++)->b = *(source3++); + } else { + dst->r = 255-*(source++); + dst->g = 255-*(source2++); + dst->b = 255-*(source3++); + } break; case 2: case 1: