From ec061ec752ff58a96a5de680b18e43fb8beea7c0 Mon Sep 17 00:00:00 2001 From: cristy Date: Fri, 21 Oct 2011 17:41:17 +0000 Subject: [PATCH] --- MagickCore/annotate.c | 1 + MagickCore/cache.c | 8 +++- MagickCore/composite-private.h | 79 +++++++++++++++++++++------------- MagickCore/draw-private.h | 22 ++-------- 4 files changed, 61 insertions(+), 49 deletions(-) diff --git a/MagickCore/annotate.c b/MagickCore/annotate.c index bf92645f7..f2e2e23a1 100644 --- a/MagickCore/annotate.c +++ b/MagickCore/annotate.c @@ -1438,6 +1438,7 @@ static MagickBooleanType RenderFreetype(Image *image,const DrawInfo *draw_info, q+=GetPixelChannels(image); continue; } + GetPixelInfo(image,&fill_color); (void) GetFillColor(draw_info,x_offset,y_offset,&fill_color, exception); fill_opacity=fill_opacity*fill_color.alpha; diff --git a/MagickCore/cache.c b/MagickCore/cache.c index 3578977dc..63c806354 100644 --- a/MagickCore/cache.c +++ b/MagickCore/cache.c @@ -2147,6 +2147,7 @@ MagickExport MagickBooleanType GetOneAuthenticPixel(Image *image, pixel[RedPixelChannel]=image->background_color.red; pixel[GreenPixelChannel]=image->background_color.green; pixel[BluePixelChannel]=image->background_color.blue; + pixel[BlackPixelChannel]=image->background_color.black; pixel[AlphaPixelChannel]=image->background_color.alpha; return(MagickFalse); } @@ -2221,6 +2222,7 @@ static MagickBooleanType GetOneAuthenticPixelFromCache(Image *image, pixel[RedPixelChannel]=image->background_color.red; pixel[GreenPixelChannel]=image->background_color.green; pixel[BluePixelChannel]=image->background_color.blue; + pixel[BlackPixelChannel]=image->background_color.black; pixel[AlphaPixelChannel]=image->background_color.alpha; return(MagickFalse); } @@ -2268,8 +2270,7 @@ static MagickBooleanType GetOneAuthenticPixelFromCache(Image *image, % */ MagickExport MagickBooleanType GetOneVirtualMagickPixel(const Image *image, - const ssize_t x,const ssize_t y,PixelInfo *pixel, - ExceptionInfo *exception) + const ssize_t x,const ssize_t y,PixelInfo *pixel,ExceptionInfo *exception) { CacheInfo *cache_info; @@ -2364,6 +2365,7 @@ MagickExport MagickBooleanType GetOneVirtualMethodPixel(const Image *image, pixel[RedPixelChannel]=image->background_color.red; pixel[GreenPixelChannel]=image->background_color.green; pixel[BluePixelChannel]=image->background_color.blue; + pixel[BlackPixelChannel]=image->background_color.black; pixel[AlphaPixelChannel]=image->background_color.alpha; return(MagickFalse); } @@ -2442,6 +2444,7 @@ MagickExport MagickBooleanType GetOneVirtualPixel(const Image *image, pixel[RedPixelChannel]=image->background_color.red; pixel[GreenPixelChannel]=image->background_color.green; pixel[BluePixelChannel]=image->background_color.blue; + pixel[BlackPixelChannel]=image->background_color.black; pixel[AlphaPixelChannel]=image->background_color.alpha; return(MagickFalse); } @@ -2520,6 +2523,7 @@ static MagickBooleanType GetOneVirtualPixelFromCache(const Image *image, pixel[RedPixelChannel]=image->background_color.red; pixel[GreenPixelChannel]=image->background_color.green; pixel[BluePixelChannel]=image->background_color.blue; + pixel[BlackPixelChannel]=image->background_color.black; pixel[AlphaPixelChannel]=image->background_color.alpha; return(MagickFalse); } diff --git a/MagickCore/composite-private.h b/MagickCore/composite-private.h index 58695d379..57715edcb 100644 --- a/MagickCore/composite-private.h +++ b/MagickCore/composite-private.h @@ -52,42 +52,63 @@ static inline void CompositePixelOver(const Image *image,const PixelInfo *p, gamma, Sa; + register ssize_t + i; + /* Compose pixel p over pixel q with the given opacities. */ - if (fabs(alpha-TransparentAlpha) < MagickEpsilon) - { - if (composite != q) - { - SetPixelRed(image,GetPixelRed(image,q),composite); - SetPixelGreen(image,GetPixelGreen(image,q),composite); - SetPixelBlue(image,GetPixelBlue(image,q),composite); - SetPixelAlpha(image,GetPixelAlpha(image,q),composite); - } - return; - } Sa=QuantumScale*alpha; Da=QuantumScale*beta, gamma=Sa*(-Da)+Sa+Da; -#if !defined(MAGICKCORE_HDRI_SUPPORT) - SetPixelAlpha(image,(Quantum) (QuantumRange*gamma+0.5),composite); gamma=1.0/(gamma <= MagickEpsilon ? 1.0 : gamma); - SetPixelRed(image,(Quantum) (gamma*MagickOver_((MagickRealType) p->red, - alpha,(MagickRealType) GetPixelRed(image,q),beta)+0.5),composite); - SetPixelGreen(image,(Quantum) (gamma*MagickOver_((MagickRealType) p->green, - alpha,(MagickRealType) GetPixelGreen(image,q),beta)+0.5),composite); - SetPixelBlue(image,(Quantum) (gamma*MagickOver_((MagickRealType) p->blue, - alpha,(MagickRealType) GetPixelBlue(image,q),beta)+0.5),composite); -#else - SetPixelAlpha(image,QuantumRange*gamma,composite); - gamma=1.0/(gamma <= MagickEpsilon ? 1.0 : gamma); - SetPixelRed(image,(Quantum) (gamma*MagickOver_((MagickRealType) p->red, - alpha,(MagickRealType) GetPixelRed(image,q),beta)),composite); - SetPixelGreen(image,(Quantum) (gamma*MagickOver_((MagickRealType) p->green, - alpha,(MagickRealType) GetPixelGreen(image,q),beta)),composite); - SetPixelBlue(image,(Quantum) (gamma*MagickOver_((MagickRealType) p->blue, - alpha,(MagickRealType) GetPixelBlue(image,q),beta)),composite); -#endif + for (i=0; i < (ssize_t) GetPixelChannels(image); i++) + { + PixelChannel + channel; + + PixelTrait + traits; + + traits=GetPixelChannelMapTraits(image,(PixelChannel) i); + channel=GetPixelChannelMapChannel(image,(PixelChannel) i); + if (traits == UndefinedPixelTrait) + continue; + switch (channel) + { + case RedPixelChannel: + { + composite[i]=ClampToQuantum(gamma*MagickOver_((MagickRealType) p->red, + alpha,(MagickRealType) q[i],beta)); + break; + } + case GreenPixelChannel: + { + composite[i]=ClampToQuantum(gamma*MagickOver_((MagickRealType) p->green, + alpha,(MagickRealType) q[i],beta)); + break; + } + case BluePixelChannel: + { + composite[i]=ClampToQuantum(gamma*MagickOver_((MagickRealType) p->blue, + alpha,(MagickRealType) q[i],beta)); + break; + } + case BlackPixelChannel: + { + composite[i]=ClampToQuantum(gamma*MagickOver_((MagickRealType) p->black, + alpha,(MagickRealType) q[i],beta)); + break; + } + case AlphaPixelChannel: + { + composite[i]=ClampToQuantum(QuantumRange*gamma); + break; + } + default: + break; + } + } } static inline void CompositePixelInfoOver(const PixelInfo *p, diff --git a/MagickCore/draw-private.h b/MagickCore/draw-private.h index 46f358863..def387d4c 100644 --- a/MagickCore/draw-private.h +++ b/MagickCore/draw-private.h @@ -41,19 +41,12 @@ static inline MagickBooleanType GetFillColor(const DrawInfo *draw_info, MagickBooleanType status; - Quantum - pixel[MaxPixelChannels]; - pattern=draw_info->fill_pattern; #if defined(MAGICKCORE_OPENMP_SUPPORT) && (_OPENMP >= 200203) #pragma omp critical #endif - status=GetOneVirtualMethodPixel(pattern,TileVirtualPixelMethod,x+ - pattern->tile_offset.x,y+pattern->tile_offset.y,pixel,exception); - fill->red=(double) pixel[RedPixelChannel]; - fill->green=(double) pixel[GreenPixelChannel]; - fill->blue=(double) pixel[BluePixelChannel]; - fill->alpha=(double) pixel[AlphaPixelChannel]; + status=GetOneVirtualMagickPixel(pattern,x+pattern->tile_offset.x, + y+pattern->tile_offset.y,fill,exception); return(status); } } @@ -73,19 +66,12 @@ static inline MagickBooleanType GetStrokeColor(const DrawInfo *draw_info, MagickBooleanType status; - Quantum - pixel[MaxPixelChannels]; - pattern=draw_info->stroke_pattern; #if defined(MAGICKCORE_OPENMP_SUPPORT) && (_OPENMP >= 200203) #pragma omp critical #endif - status=GetOneVirtualMethodPixel(pattern,TileVirtualPixelMethod,x+ - pattern->tile_offset.x,y+pattern->tile_offset.y,pixel,exception); - stroke->red=(double) pixel[RedPixelChannel]; - stroke->green=(double) pixel[GreenPixelChannel]; - stroke->blue=(double) pixel[BluePixelChannel]; - stroke->alpha=(double) pixel[AlphaPixelChannel]; + status=GetOneVirtualMagickPixel(pattern,x+pattern->tile_offset.x,y+ + pattern->tile_offset.y,stroke,exception); return(status); } } -- 2.40.0