diff --git a/src/ImageSharp/Formats/Heif/Heif4CharCode.cs b/src/ImageSharp/Formats/Heif/Heif4CharCode.cs index 2b14a62725..d6d31ef1d3 100644 --- a/src/ImageSharp/Formats/Heif/Heif4CharCode.cs +++ b/src/ImageSharp/Formats/Heif/Heif4CharCode.cs @@ -248,4 +248,14 @@ public enum Heif4CharCode : uint /// free = 0x66726565U, + /// + /// ICC Color Profile. + /// + rICC = 0x72494343U, + + /// + /// ICC Color Profile. + /// + prof = 0x70726F66U, + } diff --git a/src/ImageSharp/Formats/Heif/Heif4CharCode.tt b/src/ImageSharp/Formats/Heif/Heif4CharCode.tt index 6f15a33ab9..9f8555f33b 100644 --- a/src/ImageSharp/Formats/Heif/Heif4CharCode.tt +++ b/src/ImageSharp/Formats/Heif/Heif4CharCode.tt @@ -54,6 +54,8 @@ "pict", "Picture handler type", "uuid", "Unique Identifier", "free", "Free space", + "rICC", "ICC Color Profile", + "prof", "ICC Color Profile", }; #> diff --git a/src/ImageSharp/Formats/Heif/HeifDecoderCore.cs b/src/ImageSharp/Formats/Heif/HeifDecoderCore.cs index fb81a943c5..8a8c8e29f6 100644 --- a/src/ImageSharp/Formats/Heif/HeifDecoderCore.cs +++ b/src/ImageSharp/Formats/Heif/HeifDecoderCore.cs @@ -7,6 +7,7 @@ using System.Text; using SixLabors.ImageSharp.IO; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Metadata; +using SixLabors.ImageSharp.Metadata.Profiles.Icc; using SixLabors.ImageSharp.PixelFormats; namespace SixLabors.ImageSharp.Formats.Heif; @@ -442,8 +443,17 @@ internal sealed class HeifDecoderCore : IImageDecoderInternals properties.Add(new KeyValuePair(Heif4CharCode.pixi, new int[] { channelCount, bitsPerPixel })); break; - case Heif4CharCode.altt: case Heif4CharCode.colr: + Heif4CharCode profileType = (Heif4CharCode)BinaryPrimitives.ReadUInt32BigEndian(buffer); + if (profileType is Heif4CharCode.rICC or Heif4CharCode.prof) + { + byte[] iccData = new byte[itemLength - 4]; + buffer[4..].CopyTo(iccData); + this.metadata.IccProfile = new IccProfile(iccData); + } + + break; + case Heif4CharCode.altt: case Heif4CharCode.imir: case Heif4CharCode.irot: case Heif4CharCode.iscl: