From d06bf86dbf4f10c767a327a049832dc11e699125 Mon Sep 17 00:00:00 2001 From: cristy Date: Wed, 21 Dec 2011 02:18:45 +0000 Subject: [PATCH] --- MagickCore/composite.c | 28 ++++++++++++++++++++++++++++ MagickCore/nt-base.c | 8 ++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/MagickCore/composite.c b/MagickCore/composite.c index 18e62d79c..4500683c8 100644 --- a/MagickCore/composite.c +++ b/MagickCore/composite.c @@ -2222,6 +2222,7 @@ MagickBooleanType composite_channels; { case AtopCompositeOp: case ClearCompositeOp: + case ColorDodgeCompositeOp: case CopyCompositeOp: case DarkenCompositeOp: case DarkenIntensityCompositeOp: @@ -2237,6 +2238,7 @@ MagickBooleanType composite_channels; case InCompositeOp: case LightenCompositeOp: case LightenIntensityCompositeOp: + case MathematicsCompositeOp: case MinusDstCompositeOp: case MinusSrcCompositeOp: case ModulusAddCompositeOp: @@ -2354,10 +2356,12 @@ MagickBooleanType composite_channels; alpha=Sa*Da; break; } + case ColorDodgeCompositeOp: case DifferenceCompositeOp: case DivideDstCompositeOp: case DivideSrcCompositeOp: case ExclusionCompositeOp: + case MathematicsCompositeOp: case MinusDstCompositeOp: case MinusSrcCompositeOp: case ModulusAddCompositeOp: @@ -2507,6 +2511,23 @@ MagickBooleanType composite_channels; pixel=Sc*Sa+Dc*(1.0-Sa); break; } + case ColorDodgeCompositeOp: + { + if ((fabs((Sa*Sc)-Sa) < MagickEpsilon) && + (fabs((Da*Dc)) < MagickEpsilon)) + { + pixel=gamma*((Sa*Sc)*(1.0-Da)+(Da*Dc)*(1.0-Sa)); + break; + } + if (fabs((Sa*Sc)-Sa) < MagickEpsilon) + { + pixel=gamma*(Sa*Da+(Sa*Sc)*(1.0-Da)+(Da*Dc)*(1.0-Sa)); + break; + } + pixel=gamma*((Da*Dc)*Sa*Sa/(Sa-(Sa*Sc))+(Sa*Sc)*(1.0-Da)+(Da*Dc)* + (1.0-Sa)); + break; + } case CopyCompositeOp: case ReplaceCompositeOp: case SrcCompositeOp: @@ -2618,6 +2639,13 @@ MagickBooleanType composite_channels; Da*GetPixelIntensity(image,q) ? Sc : Dc; break; } + case MathematicsCompositeOp: + { + pixel=gamma*geometry_info.rho*Sa*Sc*Da*Dc+geometry_info.sigma* + Sa*Sc*Da+geometry_info.xi*Da*Dc*Sa+geometry_info.psi*Sa*Da+ + Sa*Sc*(1.0-Da)+Da*Dc*(1.0-Sa); + break; + } case MinusDstCompositeOp: { pixel=gamma*(Sa*Sc+Da*Dc-2.0*Da*Dc*Sa); diff --git a/MagickCore/nt-base.c b/MagickCore/nt-base.c index c5a029257..6299beec3 100644 --- a/MagickCore/nt-base.c +++ b/MagickCore/nt-base.c @@ -1153,7 +1153,7 @@ MagickPrivate MagickBooleanType NTGetModulePath(const char *module,char *path) % % % % % % -+ N T G e t T y pe L i s t % ++ N T G e t T y p e L i s t % % % % % % % @@ -2236,7 +2236,8 @@ MagickPrivate struct dirent *NTReadDirectory(DIR *entry) % may coexist. % % Values are stored in the registry under a base path path similar to -% "HKEY_LOCAL_MACHINE/SOFTWARE\ImageMagick\5.5.7\Q:16". The provided subkey +% "HKEY_LOCAL_MACHINE/SOFTWARE\ImageMagick\7.0.0\Q:16" or +% "HKEY_CURRENT_USER/SOFTWARE\ImageMagick\7.0.0\Q:16". The provided subkey % is appended to this base path to form the full key. % % The format of the NTRegistryKeyLookup method is: @@ -2276,6 +2277,9 @@ MagickPrivate unsigned char *NTRegistryKeyLookup(const char *subkey) (void) LogMagickEvent(ConfigureEvent,GetMagickModule(),"%s",package_key); registry_key=(HKEY) INVALID_HANDLE_VALUE; status=RegOpenKeyExA(HKEY_LOCAL_MACHINE,package_key,0,KEY_READ,®istry_key); + if (status != ERROR_SUCCESS) + status=RegOpenKeyExA(HKEY_CURRENT_USER,package_key,0,KEY_READ, + ®istry_key); if (status != ERROR_SUCCESS) { registry_key=(HKEY) INVALID_HANDLE_VALUE; -- 2.40.0