logmap=(Quantum *) RelinquishMagickMemory(logmap);
return(status);
}
+ case XYZColorspace:
+ {
+ /*
+ Transform image from RGB to XYZ.
+ */
+ if (image->storage_class == PseudoClass)
+ {
+ if (SyncImage(image,exception) == MagickFalse)
+ return(MagickFalse);
+ if (SetImageStorageClass(image,DirectClass,exception) == MagickFalse)
+ return(MagickFalse);
+ }
+ image_view=AcquireAuthenticCacheView(image,exception);
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+ #pragma omp parallel for schedule(static,4) shared(status) \
+ dynamic_number_threads(image,image->columns,image->rows,1)
+#endif
+ for (y=0; y < (ssize_t) image->rows; y++)
+ {
+ double
+ X,
+ Y,
+ Z;
+
+ MagickBooleanType
+ sync;
+
+ register ssize_t
+ x;
+
+ register Quantum
+ *restrict q;
+
+ if (status == MagickFalse)
+ continue;
+ q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,
+ exception);
+ if (q == (Quantum *) NULL)
+ {
+ status=MagickFalse;
+ continue;
+ }
+ X=0.0;
+ Y=0.0;
+ Z=0.0;
+ for (x=0; x < (ssize_t) image->columns; x++)
+ {
+ ConvertRGBToXYZ(GetPixelRed(image,q),GetPixelGreen(image,q),
+ GetPixelBlue(image,q),&X,&Y,&Z);
+ SetPixelRed(image,ClampToQuantum((MagickRealType) QuantumRange*X),q);
+ SetPixelGreen(image,ClampToQuantum((MagickRealType) QuantumRange*Y),
+ q);
+ SetPixelBlue(image,ClampToQuantum((MagickRealType) QuantumRange*Z),q);
+ q+=GetPixelChannels(image);
+ }
+ sync=SyncCacheViewAuthenticPixels(image_view,exception);
+ if (sync == MagickFalse)
+ status=MagickFalse;
+ }
+ image_view=DestroyCacheView(image_view);
+ return(status);
+ }
default:
break;
}
}
break;
}
- case XYZColorspace:
- {
- /*
- Initialize CIE XYZ tables (ITU-R 709 RGB):
-
- X = 0.4124564*R+0.3575761*G+0.1804375*B
- Y = 0.2126729*R+0.7151522*G+0.0721750*B
- Z = 0.0193339*R+0.1191920*G+0.9503041*B
- */
-#if defined(MAGICKCORE_OPENMP_SUPPORT)
- #pragma omp parallel for schedule(static) \
- dynamic_number_threads(image,image->columns,1,1)
-#endif
- for (i=0; i <= (ssize_t) MaxMap; i++)
- {
- x_map[i].x=0.4124564f*(MagickRealType) i;
- y_map[i].x=0.3575761f*(MagickRealType) i;
- z_map[i].x=0.1804375f*(MagickRealType) i;
- x_map[i].y=0.2126729f*(MagickRealType) i;
- y_map[i].y=0.7151522f*(MagickRealType) i;
- z_map[i].y=0.0721750f*(MagickRealType) i;
- x_map[i].z=0.0193339f*(MagickRealType) i;
- y_map[i].z=0.1191920f*(MagickRealType) i;
- z_map[i].z=0.9503041f*(MagickRealType) i;
- }
- break;
- }
case YCCColorspace:
{
/*
r;
/*
- * Convert XYZ to RGB colorspace.
- * */
+ Convert XYZ to RGB colorspace.
+ */
assert(red != (Quantum *) NULL);
assert(green != (Quantum *) NULL);
assert(blue != (Quantum *) NULL);
return(MagickFalse);
return(status);
}
+ case XYZColorspace:
+ {
+ /*
+ Transform image from XYZ to RGB.
+ */
+ if (image->storage_class == PseudoClass)
+ {
+ if (SyncImage(image,exception) == MagickFalse)
+ return(MagickFalse);
+ if (SetImageStorageClass(image,DirectClass,exception) == MagickFalse)
+ return(MagickFalse);
+ }
+ image_view=AcquireAuthenticCacheView(image,exception);
+#if defined(MAGICKCORE_OPENMP_SUPPORT)
+ #pragma omp parallel for schedule(static,4) shared(status) \
+ dynamic_number_threads(image,image->columns,image->rows,1)
+#endif
+ for (y=0; y < (ssize_t) image->rows; y++)
+ {
+ MagickBooleanType
+ sync;
+
+ register ssize_t
+ x;
+
+ register Quantum
+ *restrict q;
+
+ if (status == MagickFalse)
+ continue;
+ q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,
+ exception);
+ if (q == (Quantum *) NULL)
+ {
+ status=MagickFalse;
+ continue;
+ }
+ for (x=0; x < (ssize_t) image->columns; x++)
+ {
+ double
+ X,
+ Y,
+ Z;
+
+ Quantum
+ blue,
+ green,
+ red;
+
+ X=QuantumScale*GetPixelRed(image,q);
+ Y=QuantumScale*GetPixelGreen(image,q);
+ Z=QuantumScale*GetPixelBlue(image,q);
+ ConvertXYZToRGB(X,Y,Z,&red,&green,&blue);
+ SetPixelRed(image,red,q);
+ SetPixelGreen(image,green,q);
+ SetPixelBlue(image,blue,q);
+ q+=GetPixelChannels(image);
+ }
+ sync=SyncCacheViewAuthenticPixels(image_view,exception);
+ if (sync == MagickFalse)
+ status=MagickFalse;
+ }
+ image_view=DestroyCacheView(image_view);
+ if (SetImageColorspace(image,sRGBColorspace,exception) == MagickFalse)
+ return(MagickFalse);
+ return(status);
+ }
default:
break;
}
}
break;
}
- case XYZColorspace:
- {
- /*
- Initialize CIE XYZ tables (ITU R-709 RGB):
-
- R = 3.2404542*X-1.5371385*Y-0.4985314*Z
- G = -0.9692660*X+1.8760108*Y+0.0415560*Z
- B = 0.0556434*X-0.2040259*Y+1.057225*Z
- */
-#if defined(MAGICKCORE_OPENMP_SUPPORT)
- #pragma omp parallel for schedule(static) \
- dynamic_number_threads(image,image->columns,1,1)
-#endif
- for (i=0; i <= (ssize_t) MaxMap; i++)
- {
- x_map[i].x=3.2404542f*(MagickRealType) i;
- x_map[i].y=(-0.9692660f)*(MagickRealType) i;
- x_map[i].z=0.0556434f*(MagickRealType) i;
- y_map[i].x=(-1.5371385f)*(MagickRealType) i;
- y_map[i].y=1.8760108f*(MagickRealType) i;
- y_map[i].z=(-0.2040259f)*(MagickRealType) i;
- z_map[i].x=(-0.4985314f)*(MagickRealType) i;
- z_map[i].y=0.0415560f*(MagickRealType) i;
- z_map[i].z=1.0572252f*(MagickRealType) i;
- }
- break;
- }
case YCCColorspace:
{
/*