Skip to content

Commit 5d54d24

Browse files
author
Cristy
committed
check for maximum logarithmetic colorspace index
1 parent 69a93b5 commit 5d54d24

File tree

1 file changed

+28
-17
lines changed

1 file changed

+28
-17
lines changed

magick/colorspace.c

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@
6767
#include "magick/string-private.h"
6868
#include "magick/utility.h"
6969

70+
/*
71+
Define declarations.
72+
*/
73+
#define MaximumLogarithmicColorspace 1024.0
74+
7075
/*
7176
Typedef declarations.
7277
*/
@@ -741,10 +746,16 @@ MagickExport MagickBooleanType RGBTransformImage(Image *image,
741746
value=GetImageProperty(image,"reference-black");
742747
if (value != (const char *) NULL)
743748
reference_black=StringToDouble(value,(char **) NULL);
749+
if (reference_black > MaximumLogarithmicColorspace)
750+
reference_black=MaximumLogarithmicColorspace;
744751
reference_white=ReferenceWhite;
745752
value=GetImageProperty(image,"reference-white");
746753
if (value != (const char *) NULL)
747754
reference_white=StringToDouble(value,(char **) NULL);
755+
if (reference_white > MaximumLogarithmicColorspace)
756+
reference_white=MaximumLogarithmicColorspace;
757+
if (reference_black > reference_white)
758+
reference_black=reference_white;
748759
logmap=(Quantum *) AcquireQuantumMemory((size_t) MaxMap+1UL,
749760
sizeof(*logmap));
750761
if (logmap == (Quantum *) NULL)
@@ -758,7 +769,7 @@ MagickExport MagickBooleanType RGBTransformImage(Image *image,
758769
for (i=0; i <= (ssize_t) MaxMap; i++)
759770
logmap[i]=ScaleMapToQuantum((MagickRealType) (MaxMap*(reference_white+
760771
log10(black+(1.0*i/MaxMap)*(1.0-black))/((gamma/density)*0.002*
761-
MagickSafeReciprocal(film_gamma)))/1024.0));
772+
MagickSafeReciprocal(film_gamma)))/MaximumLogarithmicColorspace));
762773
image_view=AcquireAuthenticCacheView(image,exception);
763774
#if defined(MAGICKCORE_OPENMP_SUPPORT)
764775
#pragma omp parallel for schedule(static) shared(status) \
@@ -2425,12 +2436,12 @@ MagickExport MagickBooleanType TransformRGBImage(Image *image,
24252436
image->filename);
24262437
black=pow(10.0,(reference_black-reference_white)*(gamma/density)*0.002*
24272438
MagickSafeReciprocal(film_gamma));
2428-
for (i=0; i <= (ssize_t) (reference_black*MaxMap/1024.0); i++)
2439+
for (i=0; i <= (ssize_t) (reference_black*MaxMap/MaximumLogarithmicColorspace); i++)
24292440
logmap[i]=(Quantum) 0;
2430-
for ( ; i < (ssize_t) (reference_white*MaxMap/1024.0); i++)
2441+
for ( ; i < (ssize_t) (reference_white*MaxMap/MaximumLogarithmicColorspace); i++)
24312442
logmap[i]=ClampToQuantum((MagickRealType) QuantumRange/(1.0-black)*
2432-
(pow(10.0,(1024.0*i/MaxMap-reference_white)*(gamma/density)*0.002*
2433-
MagickSafeReciprocal(film_gamma))-black));
2443+
(pow(10.0,(MaximumLogarithmicColorspace*i/MaxMap-reference_white)*
2444+
(gamma/density)*0.002*MagickSafeReciprocal(film_gamma))-black));
24342445
for ( ; i <= (ssize_t) MaxMap; i++)
24352446
logmap[i]=QuantumRange;
24362447
if (image->storage_class == PseudoClass)
@@ -2780,12 +2791,12 @@ MagickExport MagickBooleanType TransformRGBImage(Image *image,
27802791
pixel.blue=x_map[red].z+y_map[green].z+z_map[blue].z;
27812792
if (colorspace == YCCColorspace)
27822793
{
2783-
pixel.red=QuantumRange*YCCMap[RoundToYCC(1024.0*pixel.red/
2784-
(double) MaxMap)];
2785-
pixel.green=QuantumRange*YCCMap[RoundToYCC(1024.0*pixel.green/
2786-
(double) MaxMap)];
2787-
pixel.blue=QuantumRange*YCCMap[RoundToYCC(1024.0*pixel.blue/
2788-
(double) MaxMap)];
2794+
pixel.red=QuantumRange*YCCMap[RoundToYCC(
2795+
MaximumLogarithmicColorspace*pixel.red/(double) MaxMap)];
2796+
pixel.green=QuantumRange*YCCMap[RoundToYCC(
2797+
MaximumLogarithmicColorspace*pixel.green/(double) MaxMap)];
2798+
pixel.blue=QuantumRange*YCCMap[RoundToYCC(
2799+
MaximumLogarithmicColorspace*pixel.blue/(double) MaxMap)];
27892800
}
27902801
else
27912802
{
@@ -2846,12 +2857,12 @@ MagickExport MagickBooleanType TransformRGBImage(Image *image,
28462857
pixel.blue=x_map[red].z+y_map[green].z+z_map[blue].z;
28472858
if (colorspace == YCCColorspace)
28482859
{
2849-
pixel.red=QuantumRange*YCCMap[RoundToYCC(1024.0*pixel.red/
2850-
(double) MaxMap)];
2851-
pixel.green=QuantumRange*YCCMap[RoundToYCC(1024.0*pixel.green/
2852-
(double) MaxMap)];
2853-
pixel.blue=QuantumRange*YCCMap[RoundToYCC(1024.0*pixel.blue/
2854-
(double) MaxMap)];
2860+
pixel.red=QuantumRange*YCCMap[RoundToYCC(
2861+
MaximumLogarithmicColorspace*pixel.red/(double) MaxMap)];
2862+
pixel.green=QuantumRange*YCCMap[RoundToYCC(
2863+
MaximumLogarithmicColorspace*pixel.green/(double) MaxMap)];
2864+
pixel.blue=QuantumRange*YCCMap[RoundToYCC(
2865+
MaximumLogarithmicColorspace*pixel.blue/(double) MaxMap)];
28552866
}
28562867
else
28572868
{

0 commit comments

Comments
 (0)