67
67
#include "magick/string-private.h"
68
68
#include "magick/utility.h"
69
69
70
+ /*
71
+ Define declarations.
72
+ */
73
+ #define MaximumLogarithmicColorspace 1024.0
74
+
70
75
/*
71
76
Typedef declarations.
72
77
*/
@@ -741,10 +746,16 @@ MagickExport MagickBooleanType RGBTransformImage(Image *image,
741
746
value = GetImageProperty (image ,"reference-black" );
742
747
if (value != (const char * ) NULL )
743
748
reference_black = StringToDouble (value ,(char * * ) NULL );
749
+ if (reference_black > MaximumLogarithmicColorspace )
750
+ reference_black = MaximumLogarithmicColorspace ;
744
751
reference_white = ReferenceWhite ;
745
752
value = GetImageProperty (image ,"reference-white" );
746
753
if (value != (const char * ) NULL )
747
754
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 ;
748
759
logmap = (Quantum * ) AcquireQuantumMemory ((size_t ) MaxMap + 1UL ,
749
760
sizeof (* logmap ));
750
761
if (logmap == (Quantum * ) NULL )
@@ -758,7 +769,7 @@ MagickExport MagickBooleanType RGBTransformImage(Image *image,
758
769
for (i = 0 ; i <= (ssize_t ) MaxMap ; i ++ )
759
770
logmap [i ]= ScaleMapToQuantum ((MagickRealType ) (MaxMap * (reference_white +
760
771
log10 (black + (1.0 * i /MaxMap )* (1.0 - black ))/((gamma /density )* 0.002 *
761
- MagickSafeReciprocal (film_gamma )))/1024.0 ));
772
+ MagickSafeReciprocal (film_gamma )))/MaximumLogarithmicColorspace ));
762
773
image_view = AcquireAuthenticCacheView (image ,exception );
763
774
#if defined(MAGICKCORE_OPENMP_SUPPORT )
764
775
#pragma omp parallel for schedule(static) shared(status) \
@@ -2425,12 +2436,12 @@ MagickExport MagickBooleanType TransformRGBImage(Image *image,
2425
2436
image -> filename );
2426
2437
black = pow (10.0 ,(reference_black - reference_white )* (gamma /density )* 0.002 *
2427
2438
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 ++ )
2429
2440
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 ++ )
2431
2442
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 ));
2434
2445
for ( ; i <= (ssize_t ) MaxMap ; i ++ )
2435
2446
logmap [i ]= QuantumRange ;
2436
2447
if (image -> storage_class == PseudoClass )
@@ -2780,12 +2791,12 @@ MagickExport MagickBooleanType TransformRGBImage(Image *image,
2780
2791
pixel .blue = x_map [red ].z + y_map [green ].z + z_map [blue ].z ;
2781
2792
if (colorspace == YCCColorspace )
2782
2793
{
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 )];
2789
2800
}
2790
2801
else
2791
2802
{
@@ -2846,12 +2857,12 @@ MagickExport MagickBooleanType TransformRGBImage(Image *image,
2846
2857
pixel .blue = x_map [red ].z + y_map [green ].z + z_map [blue ].z ;
2847
2858
if (colorspace == YCCColorspace )
2848
2859
{
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 )];
2855
2866
}
2856
2867
else
2857
2868
{
0 commit comments