/*
Define declarations.
*/
-#if defined(MAGICKCORE_LCMS_DELEGATE)
-#if defined(LCMS_VERSION) && (LCMS_VERSION < 2000)
-#define cmsUInt32Number DWORD
+#if !defined(LCMS_VERSION) || (LCMS_VERSION < 2000)
#define cmsSigCmykData icSigCmykData
#define cmsSigGrayData icSigGrayData
#define cmsSigLabData icSigLabData
#define cmsSigYCbCrData icSigYCbCrData
#define cmsSigLinkClass icSigLinkClass
#define cmsColorSpaceSignature icColorSpaceSignature
-#endif
+#define cmsUInt32Number DWORD
+#define cmsSetLogErrorHandler(handler) cmsSetErrorHandler(handler)
+#define cmsCreateTransformTHR(context,source_profile,source_type, \
+ target_profile,target_type,intent,flags) cmsCreateTransform(source_profile, \
+ source_type,target_profile,target_type,intent,flags);
+#define cmsOpenProfileFromMemTHR(context,profile,length) \
+ cmsOpenProfileFromMem(profile,length)
#endif
\f
/*
return(transform);
}
-static cmsHTRANSFORM *AcquireTransformThreadSet(
+static cmsHTRANSFORM *AcquireTransformThreadSet(Image *image,
const cmsHPROFILE source_profile,const cmsUInt32Number source_type,
const cmsHPROFILE target_profile,const cmsUInt32Number target_type,
const int intent,const cmsUInt32Number flags)
(void) ResetMagickMemory(transform,0,number_threads*sizeof(*transform));
for (i=0; i < (ssize_t) number_threads; i++)
{
- transform[i]=cmsCreateTransform(source_profile,source_type,target_profile,
- target_type,intent,flags);
+ transform[i]=cmsCreateTransformTHR(image,source_profile,source_type,
+ target_profile,target_type,intent,flags);
if (transform[i] == (cmsHTRANSFORM) NULL)
return(DestroyTransformThreadSet(transform));
}
}
#if defined(MAGICKCORE_LCMS_DELEGATE)
#if defined(LCMS_VERSION) && (LCMS_VERSION >= 2000)
-static void LCMSErrorHandler(cmsContext context,cmsUInt32Number severity,
+static void LCMSExceptionHandler(cmsContext context,cmsUInt32Number severity,
const char *message)
{
- (void) context;
- (void) LogMagickEvent(TransformEvent,GetMagickModule(),"lcms: #%d, %s",
+ Image
+ *image;
+
+ (void) LogMagickEvent(TransformEvent,GetMagickModule(),"lcms: #%u, %s",
severity,message != (char *) NULL ? message : "no message");
+ image=(Image *) context;
+ if (image != (Image *) NULL)
+ (void) ThrowMagickException(&image->exception,GetMagickModule(),
+ ImageWarning,"UnableToTransformColorspace","`%s'",image->filename);
+
}
-#endif
-#if defined(LCMS_VERSION) && (LCMS_VERSION < 2000)
-#if defined(LCMS_VERSION) && (LCMS_VERSION > 1010)
-static int LCMSErrorHandler(int severity,const char *message)
+#else
+static int LCMSExceptionHandler(int severity,const char *message)
{
(void) LogMagickEvent(TransformEvent,GetMagickModule(),"lcms: #%d, %s",
severity,message != (char *) NULL ? message : "no message");
}
#endif
#endif
-#endif
MagickExport MagickBooleanType ProfileImage(Image *image,const char *name,
const void *datum,const size_t length,
ResetImageProfileIterator(image);
for (name=GetNextImageProfile(image); name != (const char *) NULL; )
{
- for (i=1; i < number_arguments; i++)
+ for (i=1; i < (ssize_t) number_arguments; i++)
{
if ((*arguments[i] == '!') &&
(LocaleCompare(name,arguments[i]+1) == 0))
}
name=GetNextImageProfile(image);
}
- for (i=0; i < number_arguments; i++)
+ for (i=0; i < (ssize_t) number_arguments; i++)
arguments[i]=DestroyString(arguments[i]);
arguments=(char **) RelinquishMagickMemory(arguments);
return(MagickTrue);
/*
Transform pixel colors as defined by the color profiles.
*/
-#if defined(LCMS_VERSION) && (LCMS_VERSION >= 2000)
- cmsSetLogErrorHandler(LCMSErrorHandler);
-#endif
-#if defined(LCMS_VERSION) && (LCMS_VERSION < 2000)
-#if defined(LCMS_VERSION) && (LCMS_VERSION > 1010)
- cmsSetErrorHandler(LCMSErrorHandler);
-#else
- (void) cmsErrorAction(LCMS_ERROR_SHOW);
-#endif
-#endif
- source_profile=cmsOpenProfileFromMem(GetStringInfoDatum(profile),
- (cmsUInt32Number) GetStringInfoLength(profile));
+ cmsSetLogErrorHandler(LCMSExceptionHandler);
+ source_profile=cmsOpenProfileFromMemTHR(image,
+ GetStringInfoDatum(profile),(cmsUInt32Number)
+ GetStringInfoLength(profile));
if (source_profile == (cmsHPROFILE) NULL)
ThrowBinaryException(ResourceLimitError,
"ColorspaceColorProfileMismatch",name);
if (icc_profile != (StringInfo *) NULL)
{
target_profile=source_profile;
- source_profile=cmsOpenProfileFromMem(
+ source_profile=cmsOpenProfileFromMemTHR(image,
GetStringInfoDatum(icc_profile),(cmsUInt32Number)
GetStringInfoLength(icc_profile));
if (source_profile == (cmsHPROFILE) NULL)
if (image->black_point_compensation != MagickFalse)
flags|=cmsFLAGS_BLACKPOINTCOMPENSATION;
#endif
- transform=AcquireTransformThreadSet(source_profile,source_type,
- target_profile,target_type,intent,flags);
+ transform=AcquireTransformThreadSet(image,source_profile,
+ source_type,target_profile,target_type,intent,flags);
if (transform == (cmsHTRANSFORM *) NULL)
ThrowProfileException(ImageError,"UnableToCreateColorTransform",
name);
#endif
for (y=0; y < (ssize_t) image->rows; y++)
{
+ int
+ id;
+
MagickBooleanType
sync;
*restrict indexes;
register ssize_t
- id,
x;
register PixelPacket
}
if (length < 16)
return(MagickFalse);
- id=(int) ReadProfileShort(LSBEndian,exif);
+ id=(ssize_t) ReadProfileShort(LSBEndian,exif);
endian=LSBEndian;
if (id == 0x4949)
endian=LSBEndian;