/// <summary> /// Gets image handle color profiles. /// </summary> /// <returns>The image handle color profiles.</returns> /// <exception cref="HeifException"> /// The color profile type is not supported. /// /// -or- /// /// A LibHeif error occurred. /// </exception> private unsafe ImageHandleColorProfiles GetImageHandleColorProfiles() { HeifIccColorProfile iccProfile; HeifNclxColorProfile nclxProfile; if (LibHeifVersion.Is1Point10OrLater) { iccProfile = HeifIccColorProfile.TryCreate(this.imageHandle); nclxProfile = HeifNclxColorProfile.TryCreate(this.imageHandle); } else { // LibHeif versions prior to 1.10 only support one color profile per image. var colorProfileType = LibHeifNative.heif_image_handle_get_color_profile_type(this.imageHandle); switch (colorProfileType) { case heif_color_profile_type.None: iccProfile = null; nclxProfile = null; break; case heif_color_profile_type.Nclx: iccProfile = null; nclxProfile = HeifNclxColorProfile.TryCreate(this.imageHandle); break; case heif_color_profile_type.IccProfile: case heif_color_profile_type.RestrictedIcc: iccProfile = HeifIccColorProfile.TryCreate(this.imageHandle); nclxProfile = null; break; default: throw new HeifException(Resources.ColorProfileTypeNotSupported); } } return(new ImageHandleColorProfiles(iccProfile, nclxProfile)); }
/// <summary> /// Updates the cached color profiles while locked. /// </summary> /// <exception cref="HeifException"> /// The color profile type is not supported. /// /// -or- /// /// A LibHeif error occurred. /// </exception> private void UpdateCachedColorProfilesWhileLocked() { if (LibHeifVersion.Is1Point12OrLater) { this.cachedIccColorProfile = HeifIccColorProfile.TryCreate(this.image); this.cachedNclxColorProfile = HeifNclxColorProfile.TryCreate(this.image); } else { // LibHeif version 1.11 and earlier will crash when retrieving the NCLX color // profile if the image does not have one. var colorProfileType = LibHeifNative.heif_image_get_color_profile_type(this.image); switch (colorProfileType) { case heif_color_profile_type.None: this.cachedIccColorProfile = null; this.cachedNclxColorProfile = null; break; case heif_color_profile_type.Nclx: this.cachedIccColorProfile = null; this.cachedNclxColorProfile = HeifNclxColorProfile.TryCreate(this.image); break; case heif_color_profile_type.IccProfile: case heif_color_profile_type.RestrictedIcc: this.cachedIccColorProfile = HeifIccColorProfile.TryCreate(this.image); this.cachedNclxColorProfile = null; break; default: throw new HeifException(Resources.ColorProfileTypeNotSupported); } } }