% MagickCore Property Methods %
% %
% Software Design %
-% John Cristy %
+% Cristy %
% March 2000 %
% %
% %
#include "lcms.h"
#endif
#endif
-
-
+\f
+/*
+ Define declarations.
+*/
+#if defined(MAGICKCORE_LCMS_DELEGATE)
+#if defined(LCMS_VERSION) && (LCMS_VERSION < 2000)
+#define cmsUInt32Number DWORD
+#endif
+#endif
+\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
}
return(MagickTrue);
}
-
-
+\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
*p='\0';
return(SetImageProperty(image,key,value,exception));
}
-
-
+\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
return(MagickFalse);
return(DeleteNodeFromSplayTree((SplayTreeInfo *) image->properties,property));
}
-
-
+\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
image->properties=(void *) DestroySplayTree((SplayTreeInfo *)
image->properties);
}
-
-
+\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
exception=DestroyExceptionInfo(exception);
return(status);
}
-
-
+\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
return(status);
}
+static MagickBooleanType GetICCProperty(const Image *image,const char *property,
+ ExceptionInfo *exception)
+{
+ const StringInfo
+ *profile;
+
+ magick_unreferenced(property);
+
+ profile=GetImageProfile(image,"icc");
+ if (profile == (StringInfo *) NULL)
+ profile=GetImageProfile(image,"icm");
+ if (profile == (StringInfo *) NULL)
+ return(MagickFalse);
+ if (GetStringInfoLength(profile) < 128)
+ return(MagickFalse); /* minimum ICC profile length */
+#if defined(MAGICKCORE_LCMS_DELEGATE)
+ {
+ cmsHPROFILE
+ icc_profile;
+
+ icc_profile=cmsOpenProfileFromMem(GetStringInfoDatum(profile),
+ (cmsUInt32Number) GetStringInfoLength(profile));
+ if (icc_profile != (cmsHPROFILE *) NULL)
+ {
+#if defined(LCMS_VERSION) && (LCMS_VERSION < 2000)
+ const char
+ *name;
+
+ name=cmsTakeProductName(icc_profile);
+ if (name != (const char *) NULL)
+ (void) SetImageProperty((Image *) image,"icc:name",name,exception);
+#else
+ char
+ info[MaxTextExtent];
+
+ (void) cmsGetProfileInfoASCII(icc_profile,cmsInfoDescription,
+ "en","US",info,MaxTextExtent);
+ (void) SetImageProperty((Image *) image,"icc:description",info,
+ exception);
+ (void) cmsGetProfileInfoASCII(icc_profile,cmsInfoManufacturer,
+ "en","US",info,MaxTextExtent);
+ (void) SetImageProperty((Image *) image,"icc:manufacturer",info,
+ exception);
+ (void) cmsGetProfileInfoASCII(icc_profile,cmsInfoModel,"en",
+ "US",info,MaxTextExtent);
+ (void) SetImageProperty((Image *) image,"icc:model",info,exception);
+ (void) cmsGetProfileInfoASCII(icc_profile,cmsInfoCopyright,
+ "en","US",info,MaxTextExtent);
+ (void) SetImageProperty((Image *) image,"icc:copyright",info,exception);
+#endif
+ (void) cmsCloseProfile(icc_profile);
+ }
+ }
+#endif
+ return(MagickTrue);
+}
+
static MagickBooleanType GetXMPProperty(const Image *image,const char *property)
{
char
point[i].x=(double) x*columns/4096/4096;
point[i].y=(double) y*rows/4096/4096;
}
- if( IfMagickFalse(in_subpath) )
+ if (in_subpath == MagickFalse)
{
- (void) FormatLocaleString(message,MaxTextExtent," %g %g m\n",
+ (void) FormatLocaleString(message,MaxTextExtent,"M %g %g\n",
point[1].x,point[1].y);
for (i=0; i < 3; i++)
{
if ((last[1].x == last[2].x) && (last[1].y == last[2].y) &&
(point[0].x == point[1].x) && (point[0].y == point[1].y))
(void) FormatLocaleString(message,MaxTextExtent,
- " %g %g l\n",point[1].x,point[1].y);
+ "L %g %g\n",point[1].x,point[1].y);
else
if ((last[1].x == last[2].x) && (last[1].y == last[2].y))
(void) FormatLocaleString(message,MaxTextExtent,
- " %g %g %g %g v\n",point[0].x,point[0].y,
+ "V %g %g %g %g\n",point[0].x,point[0].y,
point[1].x,point[1].y);
else
if ((point[0].x == point[1].x) && (point[0].y == point[1].y))
(void) FormatLocaleString(message,MaxTextExtent,
- " %g %g %g %g y\n",last[2].x,last[2].y,
+ "Y %g %g %g %g\n",last[2].x,last[2].y,
point[1].x,point[1].y);
else
(void) FormatLocaleString(message,MaxTextExtent,
- " %g %g %g %g %g %g c\n",last[2].x,
+ "C %g %g %g %g %g %g\n",last[2].x,
last[2].y,point[0].x,point[0].y,point[1].x,point[1].y);
for (i=0; i < 3; i++)
last[i]=point[i];
if ((last[1].x == last[2].x) && (last[1].y == last[2].y) &&
(first[0].x == first[1].x) && (first[0].y == first[1].y))
(void) FormatLocaleString(message,MaxTextExtent,
- " %g %g l z\n",first[1].x,first[1].y);
+ "L %g %g Z\n",first[1].x,first[1].y);
else
if ((last[1].x == last[2].x) && (last[1].y == last[2].y))
(void) FormatLocaleString(message,MaxTextExtent,
- " %g %g %g %g v z\n",first[0].x,first[0].y,
+ "V %g %g %g %g Z\n",first[0].x,first[0].y,
first[1].x,first[1].y);
else
if ((first[0].x == first[1].x) && (first[0].y == first[1].y))
(void) FormatLocaleString(message,MaxTextExtent,
- " %g %g %g %g y z\n",last[2].x,last[2].y,
+ "Y %g %g %g %g Z\n",last[2].x,last[2].y,
first[1].x,first[1].y);
else
(void) FormatLocaleString(message,MaxTextExtent,
- " %g %g %g %g %g %g c z\n",last[2].x,
+ "C %g %g %g %g %g %g Z\n",last[2].x,
last[2].y,first[0].x,first[0].y,first[1].x,first[1].y);
(void) ConcatenateString(&path,message);
in_subpath=MagickFalse;
assert(image != (Image *) NULL);
assert(image->signature == MagickSignature);
- if( IfMagickTrue(image->debug) )
+ if (IfMagickTrue(image->debug))
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
-
p=(const char *) NULL;
- /* if property is in splay tree - return it and we are done */
if (image->properties != (void *) NULL)
{
if (property == (const char *) NULL)
{
if (LocaleNCompare("8bim:",property,5) == 0)
{
- if( IfMagickTrue(Get8BIMProperty(image,property,exception)) &&
- (image->properties != (void *) NULL))
- {
- p=(const char *) GetValueFromSplayTree((SplayTreeInfo *)
- image->properties,property);
- return(p);
- }
+ (void) Get8BIMProperty(image,property,exception);
+ break;
}
break;
}
{
if (LocaleNCompare("exif:",property,5) == 0)
{
- if( IfMagickTrue(GetEXIFProperty(image,property,exception)) &&
- (image->properties != (void *) NULL))
- {
- p=(const char *) GetValueFromSplayTree((SplayTreeInfo *)
- image->properties,property);
- return(p);
- }
+ (void) GetEXIFProperty(image,property,exception);
+ break;
}
break;
}
case 'I':
case 'i':
{
+ if ((LocaleNCompare("icc:",property,4) == 0) ||
+ (LocaleNCompare("icm:",property,4) == 0))
+ {
+ (void) GetICCProperty(image,property,exception);
+ break;
+ }
if (LocaleNCompare("iptc:",property,5) == 0)
{
- if( IfMagickTrue(GetIPTCProperty(image,property,exception)) &&
- (image->properties != (void *) NULL))
- {
- p=(const char *) GetValueFromSplayTree((SplayTreeInfo *)
- image->properties,property);
- return(p);
- }
+ (void) GetIPTCProperty(image,property,exception);
+ break;
}
break;
}
{
if (LocaleNCompare("xmp:",property,4) == 0)
{
- if( IfMagickTrue(GetXMPProperty(image,property)) &&
- (image->properties != (void *) NULL))
- {
- p=(const char *) GetValueFromSplayTree((SplayTreeInfo *)
- image->properties,property);
- return(p);
- }
+ (void) GetXMPProperty(image,property);
+ break;
}
break;
}
default:
break;
}
- return(p);
+ if (image->properties != (void *) NULL)
+ {
+ p=(const char *) GetValueFromSplayTree((SplayTreeInfo *)
+ image->properties,property);
+ return(p);
+ }
+ return((const char *) NULL);
}
-
-
+\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
return((const char *)NULL); \
}
#define WarnNoImageInfoReturn(format,arg) \
- if (image == (Image *) NULL ) { \
+ if (image_info == (ImageInfo *) NULL ) { \
(void) ThrowMagickException(exception,GetMagickModule(),OptionWarning, \
"NoImageInfoForProperty",format,arg); \
return((const char *)NULL); \
page.y);
break;
}
- case '#': /* Image signature */
+ case '#':
{
+ /*
+ Image signature.
+ */
WarnNoImageReturn("\"%%%c\"",letter);
(void) SignatureImage(image,exception);
string=GetImageProperty(image,"signature",exception);
if (string != (char *) NULL)
return(string);
if (*value != '\0')
- {
- /* create a cloned copy of result, that will get cleaned up, eventually */
- if (image != (Image *)NULL)
- {
- (void) SetImageArtifact(image,"get-property",value);
- return(GetImageArtifact(image,"get-property"));
- }
- else
- {
- (void) SetImageOption(image_info,"get-property",value);
- return(GetImageOption(image_info,"get-property"));
- }
- }
+ {
+ /*
+ Create a cloned copy of result.
+ */
+ if (image != (Image *)NULL)
+ {
+ (void) SetImageArtifact(image,"get-property",value);
+ return(GetImageArtifact(image,"get-property"));
+ }
+ else
+ {
+ (void) SetImageOption(image_info,"get-property",value);
+ return(GetImageOption(image_info,"get-property"));
+ }
+ }
return((char *)NULL);
}
if (LocaleCompare("profile:icc",property) == 0 ||
LocaleCompare("profile:icm",property) == 0)
{
+#if !defined(LCMS_VERSION) || (LCMS_VERSION < 2000)
+#define cmsUInt32Number DWORD
+#endif
+
const StringInfo
*profile;
return((char *)NULL);
}
#undef WarnNoImageReturn
-
-
+\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
return((char *) NULL);
return((char *) GetNextKeyInSplayTree((SplayTreeInfo *) image->properties));
}
-
-
+\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
default:
p++;
*q++=(*p);
- continue;
}
- continue; /* never reached! */
+ continue;
case '&':
if (LocaleNCompare("<",p,4) == 0)
*q++='<', p+=3;
*q='\0';
return(interpret_text);
}
-
-
+\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
property);
return(value);
}
-
-
+\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
return;
ResetSplayTreeIterator((SplayTreeInfo *) image->properties);
}
-
-
+\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
assert(image->signature == MagickSignature);
if( IfMagickTrue(image->debug) )
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
-
- /* Create splay-tree */
if (image->properties == (void *) NULL)
image->properties=NewSplayTree(CompareSplayTreeString,
- RelinquishMagickMemory,RelinquishMagickMemory);
-
- /* Delete property if NULL -- empty string values are valid! */
+ RelinquishMagickMemory,RelinquishMagickMemory); /* create splay-tree */
if (value == (const char *) NULL)
- return(DeleteImageProperty(image,property));
+ return(DeleteImageProperty(image,property)); /* delete if NULL */
status=MagickTrue;
-
- /* Do not 'set' single letter properties - read only shorthand */
if (strlen(property) <= 1)
{
- (void) ThrowMagickException(exception,GetMagickModule(),
- OptionError,"SetReadOnlyProperty","`%s'",property);
+ /*
+ Do not 'set' single letter properties - read only shorthand.
+ */
+ (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
+ "SetReadOnlyProperty","`%s'",property);
return(MagickFalse);
}
/* FUTURE: binary chars or quotes in key should produce a error */
-
-
/* Set attributes with known names or special prefixes
return result is found, or break to set a free form properity
*/
{
if (LocaleCompare("channels",property) == 0)
{
- (void) ThrowMagickException(exception,GetMagickModule(),
- OptionError,"SetReadOnlyProperty","`%s'",property);
+ (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
+ "SetReadOnlyProperty","`%s'",property);
return(MagickFalse);
}
if (LocaleCompare("colorspace",property) == 0)
value);
if (colorspace < 0)
return(MagickFalse); /* FUTURE: value exception?? */
- return(SetImageColorspace(image,colorspace,exception));
+ return(SetImageColorspace(image,(ColorspaceType) colorspace,exception));
}
if (LocaleCompare("compose",property) == 0)
{