diff --git a/src/ImageSharp/MetaData/Profiles/ICC/DataReader/IccDataReader.NonPrimitives.cs b/src/ImageSharp/MetaData/Profiles/ICC/DataReader/IccDataReader.NonPrimitives.cs
index 8b942498ae..7dc8cf98aa 100644
--- a/src/ImageSharp/MetaData/Profiles/ICC/DataReader/IccDataReader.NonPrimitives.cs
+++ b/src/ImageSharp/MetaData/Profiles/ICC/DataReader/IccDataReader.NonPrimitives.cs
@@ -38,7 +38,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
/// Reads an ICC profile version number
///
/// the version number
- public Version ReadVersionNumber()
+ public IccVersion ReadVersionNumber()
{
int version = this.ReadInt32();
@@ -46,7 +46,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
int minor = (version >> 20) & 0x0F;
int bugfix = (version >> 16) & 0x0F;
- return new Version(major, minor, bugfix);
+ return new IccVersion(major, minor, bugfix);
}
///
diff --git a/src/ImageSharp/MetaData/Profiles/ICC/DataWriter/IccDataWriter.NonPrimitives.cs b/src/ImageSharp/MetaData/Profiles/ICC/DataWriter/IccDataWriter.NonPrimitives.cs
index 791a94a339..1a3c2c0ac5 100644
--- a/src/ImageSharp/MetaData/Profiles/ICC/DataWriter/IccDataWriter.NonPrimitives.cs
+++ b/src/ImageSharp/MetaData/Profiles/ICC/DataWriter/IccDataWriter.NonPrimitives.cs
@@ -31,11 +31,11 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
///
/// The value to write
/// the number of bytes written
- public int WriteVersionNumber(Version value)
+ public int WriteVersionNumber(in IccVersion value)
{
int major = value.Major.Clamp(0, byte.MaxValue);
int minor = value.Minor.Clamp(0, 15);
- int bugfix = value.Build.Clamp(0, 15);
+ int bugfix = value.Patch.Clamp(0, 15);
// TODO: This is not used?
byte mb = (byte)((minor << 4) | bugfix);
@@ -61,7 +61,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
///
/// The value to write
/// the number of bytes written
- public int WriteProfileId(IccProfileId value)
+ public int WriteProfileId(in IccProfileId value)
{
return this.WriteUInt32(value.Part1)
+ this.WriteUInt32(value.Part2)
@@ -74,7 +74,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
///
/// The value to write
/// the number of bytes written
- public int WritePositionNumber(IccPositionNumber value)
+ public int WritePositionNumber(in IccPositionNumber value)
{
return this.WriteUInt32(value.Offset)
+ this.WriteUInt32(value.Size);
@@ -85,7 +85,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
///
/// The value to write
/// the number of bytes written
- public int WriteResponseNumber(IccResponseNumber value)
+ public int WriteResponseNumber(in IccResponseNumber value)
{
return this.WriteUInt16(value.DeviceCode)
+ this.WriteFix16(value.MeasurementValue);
@@ -96,7 +96,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
///
/// The value to write
/// the number of bytes written
- public int WriteNamedColor(IccNamedColor value)
+ public int WriteNamedColor(in IccNamedColor value)
{
return this.WriteAsciiString(value.Name, 32, true)
+ this.WriteArray(value.PcsCoordinates)
@@ -108,7 +108,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
///
/// The value to write
/// the number of bytes written
- public int WriteProfileDescription(IccProfileDescription value)
+ public int WriteProfileDescription(in IccProfileDescription value)
{
return this.WriteUInt32(value.DeviceManufacturer)
+ this.WriteUInt32(value.DeviceModel)
@@ -125,7 +125,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
///
/// The value to write
/// the number of bytes written
- public int WriteScreeningChannel(IccScreeningChannel value)
+ public int WriteScreeningChannel(in IccScreeningChannel value)
{
return this.WriteFix16(value.Frequency)
+ this.WriteFix16(value.Angle)
diff --git a/src/ImageSharp/MetaData/Profiles/ICC/IccProfileHeader.cs b/src/ImageSharp/MetaData/Profiles/ICC/IccProfileHeader.cs
index f91572cfe6..189b40275a 100644
--- a/src/ImageSharp/MetaData/Profiles/ICC/IccProfileHeader.cs
+++ b/src/ImageSharp/MetaData/Profiles/ICC/IccProfileHeader.cs
@@ -7,42 +7,42 @@ using System.Numerics;
namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
{
///
- /// Contains all values of an ICC profile header
+ /// Contains all values of an ICC profile header.
///
public sealed class IccProfileHeader
{
///
- /// Gets or sets the profile size in bytes (will be ignored when writing a profile)
+ /// Gets or sets the profile size in bytes (will be ignored when writing a profile).
///
public uint Size { get; set; }
///
- /// Gets or sets the preferred CMM (Color Management Module) type
+ /// Gets or sets the preferred CMM (Color Management Module) type.
///
public string CmmType { get; set; }
///
- /// Gets or sets the profiles version number
+ /// Gets or sets the profiles version number.
///
- public Version Version { get; set; }
+ public IccVersion Version { get; set; }
///
- /// Gets or sets the type of the profile
+ /// Gets or sets the type of the profile.
///
public IccProfileClass Class { get; set; }
///
- /// Gets or sets the data colorspace
+ /// Gets or sets the data colorspace.
///
public IccColorSpaceType DataColorSpace { get; set; }
///
- /// Gets or sets the profile connection space
+ /// Gets or sets the profile connection space.
///
public IccColorSpaceType ProfileConnectionSpace { get; set; }
///
- /// Gets or sets the date and time this profile was created
+ /// Gets or sets the date and time this profile was created.
///
public DateTime CreationDate { get; set; }
@@ -59,42 +59,42 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
///
/// Gets or sets the profile flags to indicate various options for the CMM
- /// such as distributed processing and caching options
+ /// such as distributed processing and caching options.
///
public IccProfileFlag Flags { get; set; }
///
- /// Gets or sets the device manufacturer of the device for which this profile is created
+ /// Gets or sets the device manufacturer of the device for which this profile is created.
///
public uint DeviceManufacturer { get; set; }
///
- /// Gets or sets the model of the device for which this profile is created
+ /// Gets or sets the model of the device for which this profile is created.
///
public uint DeviceModel { get; set; }
///
- /// Gets or sets the device attributes unique to the particular device setup such as media type
+ /// Gets or sets the device attributes unique to the particular device setup such as media type.
///
public IccDeviceAttribute DeviceAttributes { get; set; }
///
- /// Gets or sets the rendering Intent
+ /// Gets or sets the rendering Intent.
///
public IccRenderingIntent RenderingIntent { get; set; }
///
- /// Gets or sets The normalized XYZ values of the illuminant of the PCS
+ /// Gets or sets The normalized XYZ values of the illuminant of the PCS.
///
public Vector3 PcsIlluminant { get; set; }
///
- /// Gets or sets Profile creator signature
+ /// Gets or sets profile creator signature.
///
public string CreatorSignature { get; set; }
///
- /// Gets or sets the profile ID (hash)
+ /// Gets or sets the profile ID (hash).
///
public IccProfileId Id { get; set; }
}
diff --git a/src/ImageSharp/MetaData/Profiles/ICC/Various/IccVersion.cs b/src/ImageSharp/MetaData/Profiles/ICC/Various/IccVersion.cs
new file mode 100644
index 0000000000..f38bdcd5f9
--- /dev/null
+++ b/src/ImageSharp/MetaData/Profiles/ICC/Various/IccVersion.cs
@@ -0,0 +1,45 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
+{
+ ///
+ /// Represents the ICC profile version number.
+ ///
+ public readonly struct IccVersion
+ {
+ ///
+ /// Initializes a new instance of the struct.
+ ///
+ /// The major version number.
+ /// The minor version number.
+ /// The patch version number.
+ public IccVersion(int major, int minor, int patch)
+ {
+ this.Major = major;
+ this.Minor = minor;
+ this.Patch = patch;
+ }
+
+ ///
+ /// Gets the major version number.
+ ///
+ public int Major { get; }
+
+ ///
+ /// Gets the minor version number.
+ ///
+ public int Minor { get; }
+
+ ///
+ /// Gets the patch number.
+ ///
+ public int Patch { get; }
+
+ ///
+ public override string ToString()
+ {
+ return string.Join(".", this.Major, this.Minor, this.Patch);
+ }
+ }
+}