diff --git a/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccDeviceAttribute.cs b/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccDeviceAttribute.cs
index 0a12dea0b8..3172c1d19b 100644
--- a/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccDeviceAttribute.cs
+++ b/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccDeviceAttribute.cs
@@ -9,6 +9,8 @@ namespace ImageSharp
///
/// Device attributes. Can be combined with a logical OR
+ /// The least-significant 32 bits are defined by the ICC,
+ /// the rest can be used for vendor specific values
///
[Flags]
internal enum IccDeviceAttribute : long
diff --git a/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccProfileClass.cs b/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccProfileClass.cs
index bd2f5b1c02..1ce781d082 100644
--- a/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccProfileClass.cs
+++ b/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccProfileClass.cs
@@ -10,12 +10,56 @@ namespace ImageSharp
///
internal enum IccProfileClass : uint
{
+ ///
+ /// Input profiles are generally used with devices such as scanners and
+ /// digital cameras. The types of profiles available for use as Input
+ /// profiles are N-component LUT-based, Three-component matrix-based,
+ /// and monochrome.
+ ///
InputDevice = 0x73636E72, // scnr
+
+ ///
+ /// This class of profiles represents display devices such as monitors.
+ /// The types of profiles available for use as Display profiles are
+ /// N-component LUT-based, Three-component matrix-based, and monochrome.
+ ///
DisplayDevice = 0x6D6E7472, // mntr
+
+ ///
+ /// Output profiles are used to support devices such as printers and
+ /// film recorders. The types of profiles available for use as Output
+ /// profiles are N-component LUT-based and Monochrome.
+ ///
OutputDevice = 0x70727472, // prtr
+
+ ///
+ /// This profile contains a pre-evaluated transform that cannot be undone,
+ /// which represents a one-way link or connection between devices. It does
+ /// not represent any device model nor can it be embedded into images.
+ ///
DeviceLink = 0x6C696E6B, // link
+
+ ///
+ /// This profile provides the relevant information to perform a transformation
+ /// between colour encodings and the PCS. This type of profile is based on
+ /// modelling rather than device measurement or characterization data.
+ /// ColorSpace profiles may be embedded in images.
+ ///
ColorSpace = 0x73706163, // spac
+
+ ///
+ /// This profile represents abstract transforms and does not represent any
+ /// device model. Colour transformations using Abstract profiles are performed
+ /// from PCS to PCS. Abstract profiles cannot be embedded in images.
+ ///
Abstract = 0x61627374, // abst
+
+ ///
+ /// NamedColor profiles can be thought of as sibling profiles to device profiles.
+ /// For a given device there would be one or more device profiles to handle
+ /// process colour conversions and one or more named colour profiles to handle
+ /// named colours.
+ ///
NamedColor = 0x6E6D636C, // nmcl
}
}
diff --git a/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccProfileFlag.cs b/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccProfileFlag.cs
index 1ad3204f93..ffd423b23b 100644
--- a/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccProfileFlag.cs
+++ b/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccProfileFlag.cs
@@ -8,7 +8,9 @@ namespace ImageSharp
using System;
///
- /// Profile flags. Can be combined with a logical OR
+ /// Profile flags. Can be combined with a logical OR.
+ /// The least-significant 16 bits are reserved for the ICC,
+ /// the rest can be used for vendor specific values
///
[Flags]
internal enum IccProfileFlag : int
diff --git a/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccRenderingIntent.cs b/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccRenderingIntent.cs
index 8ff74d07af..8f6abf7276 100644
--- a/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccRenderingIntent.cs
+++ b/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccRenderingIntent.cs
@@ -10,9 +10,35 @@ namespace ImageSharp
///
internal enum IccRenderingIntent : uint
{
+ ///
+ /// In perceptual transforms the PCS values represent hypothetical
+ /// measurements of a colour reproduction on the reference reflective
+ /// medium. By extension, for the perceptual intent, the PCS represents
+ /// the appearance of that reproduction as viewed in the reference viewing
+ /// environment by a human observer adapted to that environment. The exact
+ /// colour rendering of the perceptual intent is vendor specific.
+ ///
Perceptual = 0,
+
+ ///
+ /// Transformations for this intent shall re-scale the in-gamut,
+ /// chromatically adapted tristimulus values such that the white
+ /// point of the actual medium is mapped to the PCS white point
+ /// (for either input or output)
+ ///
MediaRelativeColorimetric = 1,
+
+ ///
+ /// The exact colour rendering of the saturation intent is vendor
+ /// specific and involves compromises such as trading off
+ /// preservation of hue in order to preserve the vividness of pure colours.
+ ///
Saturation = 2,
+
+ ///
+ /// Transformations for this intent shall leave the chromatically
+ /// adapted nCIEXYZ tristimulus values of the in-gamut colours unchanged.
+ ///
AbsoluteColorimetric = 3,
}
}
diff --git a/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccSignatureName.cs b/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccSignatureName.cs
index 9755441ce5..5fc2fa228c 100644
--- a/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccSignatureName.cs
+++ b/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccSignatureName.cs
@@ -15,68 +15,164 @@ namespace ImageSharp
///
Unknown = 0,
+ ///
+ /// Scene Colorimetry Estimates
+ ///
SceneColorimetryEstimates = 0x73636F65, // scoe
+ ///
+ /// Scene Appearance Estimates
+ ///
SceneAppearanceEstimates = 0x73617065, // sape
+ ///
+ /// Focal Plane Colorimetry Estimates
+ ///
FocalPlaneColorimetryEstimates = 0x66706365, // fpce
+ ///
+ /// Reflection Hardcopy Original Colorimetry
+ ///
ReflectionHardcopyOriginalColorimetry = 0x72686F63, // rhoc
+ ///
+ /// Reflection Print Output Colorimetry
+ ///
ReflectionPrintOutputColorimetry = 0x72706F63, // rpoc
+ ///
+ /// Perceptual Reference Medium Gamut
+ ///
PerceptualReferenceMediumGamut = 0x70726D67, // prmg
+ ///
+ /// Film Scanner
+ ///
FilmScanner = 0x6673636E, // fscn
+ ///
+ /// Digital Camera
+ ///
DigitalCamera = 0x6463616D, // dcam
+ ///
+ /// Reflective Scanner
+ ///
ReflectiveScanner = 0x7273636E, // rscn
+ ///
+ /// InkJet Printer
+ ///
InkJetPrinter = 0x696A6574, // ijet
+ ///
+ /// Thermal Wax Printer
+ ///
ThermalWaxPrinter = 0x74776178, // twax
+ ///
+ /// Electrophotographic Printer
+ ///
ElectrophotographicPrinter = 0x6570686F, // epho
+ ///
+ /// Electrostatic Printer
+ ///
ElectrostaticPrinter = 0x65737461, // esta
+ ///
+ /// Dye Sublimation Printer
+ ///
DyeSublimationPrinter = 0x64737562, // dsub
+ ///
+ /// Photographic Paper Printer
+ ///
PhotographicPaperPrinter = 0x7270686F, // rpho
+ ///
+ /// Film Writer
+ ///
FilmWriter = 0x6670726E, // fprn
+ ///
+ /// Video Monitor
+ ///
VideoMonitor = 0x7669646D, // vidm
+ ///
+ /// Video Camera
+ ///
VideoCamera = 0x76696463, // vidc
+ ///
+ /// Projection Television
+ ///
ProjectionTelevision = 0x706A7476, // pjtv
+ ///
+ /// Cathode Ray Tube Display
+ ///
CathodeRayTubeDisplay = 0x43525420, // CRT
+ ///
+ /// Passive Matrix Display
+ ///
PassiveMatrixDisplay = 0x504D4420, // PMD
+ ///
+ /// Active Matrix Display
+ ///
ActiveMatrixDisplay = 0x414D4420, // AMD
+ ///
+ /// Photo CD
+ ///
PhotoCD = 0x4B504344, // KPCD
+ ///
+ /// Photographic Image Setter
+ ///
PhotographicImageSetter = 0x696D6773, // imgs
+ ///
+ /// Gravure
+ ///
Gravure = 0x67726176, // grav
+ ///
+ /// Offset Lithography
+ ///
OffsetLithography = 0x6F666673, // offs
+ ///
+ /// Silkscreen
+ ///
Silkscreen = 0x73696C6B, // silk
+ ///
+ /// Flexography
+ ///
Flexography = 0x666C6578, // flex
+ ///
+ /// Motion Picture Film Scanner
+ ///
MotionPictureFilmScanner = 0x6D706673, // mpfs
+ ///
+ /// Motion Picture Film Recorder
+ ///
MotionPictureFilmRecorder = 0x6D706672, // mpfr
+ ///
+ /// Digital Motion Picture Camera
+ ///
DigitalMotionPictureCamera = 0x646D7063, // dmpc
+ ///
+ /// Digital Cinema Projector
+ ///
DigitalCinemaProjector = 0x64636A70, // dcpj
}
}
diff --git a/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccTypeSignature.cs b/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccTypeSignature.cs
index 7f7c32d1e5..73c260a7ac 100644
--- a/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccTypeSignature.cs
+++ b/src/ImageSharp/MetaData/Profiles/ICC/Enums/IccTypeSignature.cs
@@ -15,52 +15,164 @@ namespace ImageSharp
///
Unknown,
+ ///
+ /// The chromaticity tag type provides basic chromaticity data and type of
+ /// phosphors or colorants of a monitor to applications and utilities
+ ///
Chromaticity = 0x6368726D,
+ ///
+ /// This is an optional tag which specifies the laydown order in which colorants
+ /// will be printed on an n-colorant device. The laydown order may be the same
+ /// as the channel generation order listed in the colorantTableTag or the channel
+ /// order of a colour encoding type such as CMYK, in which case this tag is not
+ /// needed. When this is not the case (for example, ink-towers sometimes use
+ /// the order KCMY), this tag may be used to specify the laydown order of the
+ /// colorants
+ ///
ColorantOrder = 0x636c726f,
+ ///
+ /// The purpose of this tag is to identify the colorants used in the profile
+ /// by a unique name and set of PCSXYZ or PCSLAB values to give the colorant
+ /// an unambiguous value. The first colorant listed is the colorant of the
+ /// first device channel of a LUT tag. The second colorant listed is the
+ /// colorant of the second device channel of a LUT tag, and so on
+ ///
ColorantTable = 0x636c7274,
+ ///
+ /// The curveType embodies a one-dimensional function which maps an input
+ /// value in the domain of the function to an output value in the range
+ /// of the function
+ ///
Curve = 0x63757276,
+ ///
+ /// The dataType is a simple data structure that contains either 7-bit ASCII
+ /// or binary data
+ ///
Data = 0x64617461,
///
- /// Date and time defined by 6 unsigned 16bit integers (year, month, day, hour, minute, second)
+ /// Date and time defined by 6 unsigned 16bit integers
+ /// (year, month, day, hour, minute, second)
///
DateTime = 0x6474696D,
///
- /// Lookup table with 16bit unsigned integers (ushort)
+ /// This structure represents a colour transform using tables with 16-bit
+ /// precision. This type contains four processing elements: a 3 × 3 matrix
+ /// (which shall be the identity matrix unless the input colour space is
+ /// PCSXYZ), a set of one-dimensional input tables, a multi-dimensional
+ /// lookup table, and a set of one-dimensional output tables
///
Lut16 = 0x6D667432,
///
- /// Lookup table with 8bit unsigned integers (byte)
+ /// This structure represents a colour transform using tables of 8-bit
+ /// precision. This type contains four processing elements: a 3 × 3 matrix
+ /// (which shall be the identity matrix unless the input colour space is
+ /// PCSXYZ), a set of one-dimensional input tables, a multi-dimensional
+ /// lookup table, and a set of one-dimensional output tables.
///
Lut8 = 0x6D667431,
+ ///
+ /// This structure represents a colour transform. The type contains up
+ /// to five processing elements which are stored in the AToBTag tag
+ /// in the following order: a set of one-dimensional curves, a 3 × 3
+ /// matrix with offset terms, a set of one-dimensional curves, a
+ /// multi-dimensional lookup table, and a set of one-dimensional
+ /// output curves
+ ///
LutAToB = 0x6D414220,
+ ///
+ /// This structure represents a colour transform. The type contains
+ /// up to five processing elements which are stored in the BToATag
+ /// in the following order: a set of one-dimensional curves, a 3 × 3
+ /// matrix with offset terms, a set of one-dimensional curves, a
+ /// multi-dimensional lookup table, and a set of one-dimensional curves.
+ ///
LutBToA = 0x6D424120,
+ ///
+ /// This information refers only to the internal
+ /// profile data and is meant to provide profile makers an alternative
+ /// to the default measurement specifications
+ ///
Measurement = 0x6D656173,
///
- /// Unicode text in one or more languages
+ /// This tag structure contains a set of records each referencing a
+ /// multilingual Unicode string associated with a profile. Each string
+ /// is referenced in a separate record with the information about what
+ /// language and region the string is for.
///
MultiLocalizedUnicode = 0x6D6C7563,
+ ///
+ /// This structure represents a colour transform, containing a sequence
+ /// of processing elements. The processing elements contained in the
+ /// structure are defined in the structure itself, allowing for a flexible
+ /// structure. Currently supported processing elements are: a set of one
+ /// dimensional curves, a matrix with offset terms, and a multidimensional
+ /// lookup table (CLUT). Other processing element types may be added in
+ /// the future. Each type of processing element may be contained any
+ /// number of times in the structure.
+ ///
MultiProcessElements = 0x6D706574,
+ ///
+ /// This type is a count value and array of structures that provide colour
+ /// coordinates for colour names. For each named colour, a PCS and optional
+ /// device representation of the colour are given. Both representations are
+ /// 16-bit values and PCS values shall be relative colorimetric. The device
+ /// representation corresponds to the header’s "data colour space" field.
+ /// This representation should be consistent with the "number of device
+ /// coordinates" field in the namedColor2Type. If this field is 0, device
+ /// coordinates are not provided. The PCS representation corresponds to the
+ /// header's PCS field. The PCS representation is always provided. Colour
+ /// names are fixed-length, 32-byte fields including null termination. In
+ /// order to maintain maximum portability, it is strongly recommended that
+ /// special characters of the 7-bit ASCII set not be used.
+ ///
NamedColor2 = 0x6E636C32,
+ ///
+ /// This type describes a one-dimensional curve by specifying one of a
+ /// predefined set of functions using the parameters.
+ ///
ParametricCurve = 0x70617261,
+ ///
+ /// This type is an array of structures, each of which contains information
+ /// from the header fields and tags from the original profiles which were
+ /// combined to create the final profile. The order of the structures is
+ /// the order in which the profiles were combined and includes a structure
+ /// for the final profile. This provides a description of the profile
+ /// sequence from source to destination, typically used with the DeviceLink
+ /// profile.
+ ///
ProfileSequenceDesc = 0x70736571,
+ ///
+ /// This type is an array of structures, each of which contains information
+ /// for identification of a profile used in a sequence.
+ ///
ProfileSequenceIdentifier = 0x70736964,
+ ///
+ /// The purpose of this tag type is to provide a mechanism to relate physical
+ /// colorant amounts with the normalized device codes produced by lut8Type,
+ /// lut16Type, lutAToBType, lutBToAType or multiProcessElementsType tags
+ /// so that corrections can be made for variation in the device without
+ /// having to produce a new profile. The mechanism can be used by applications
+ /// to allow users with relatively inexpensive and readily available
+ /// instrumentation to apply corrections to individual output colour
+ /// channels in order to achieve consistent results.
+ ///
ResponseCurveSet16 = 0x72637332,
///
@@ -68,6 +180,12 @@ namespace ImageSharp
///
S15Fixed16Array = 0x73663332,
+ ///
+ /// The signatureType contains a 4-byte sequence. Sequences of less than four
+ /// characters are padded at the end with spaces. Typically this type is used
+ /// for registered tags that can be displayed on many development systems as
+ /// a sequence of four characters.
+ ///
Signature = 0x73696720,
///
@@ -100,6 +218,9 @@ namespace ImageSharp
///
UInt8Array = 0x75693038,
+ ///
+ /// This type represents a set of viewing condition parameters.
+ ///
ViewingConditions = 0x76696577,
///
@@ -107,6 +228,15 @@ namespace ImageSharp
///
Xyz = 0x58595A20,
+ ///
+ /// The textDescriptionType is a complex structure that contains three types of
+ /// text description structures: 7-bit ASCII, Unicode and ScriptCode. Since no
+ /// single standard method for specifying localizable character sets exists across
+ /// the major platform vendors, including all three provides access for the major
+ /// operating systems. The 7-bit ASCII description is to be an invariant,
+ /// nonlocalizable name for consistent reference. It is preferred that both the
+ /// Unicode and ScriptCode structures be properly localized.
+ ///
TextDescription = 0x64657363,
}
}