/// <summary> /// Reads a <see cref="IccMultiProcessElement"/> /// </summary> /// <returns>The read <see cref="IccMultiProcessElement"/></returns> public IccMultiProcessElement ReadMultiProcessElement() { IccMultiProcessElementSignature signature = (IccMultiProcessElementSignature)this.ReadUInt32(); ushort inChannelCount = this.ReadUInt16(); ushort outChannelCount = this.ReadUInt16(); switch (signature) { case IccMultiProcessElementSignature.CurveSet: return(this.ReadCurveSetProcessElement(inChannelCount, outChannelCount)); case IccMultiProcessElementSignature.Matrix: return(this.ReadMatrixProcessElement(inChannelCount, outChannelCount)); case IccMultiProcessElementSignature.Clut: return(this.ReadClutProcessElement(inChannelCount, outChannelCount)); // Currently just placeholders for future ICC expansion case IccMultiProcessElementSignature.BAcs: this.AddIndex(8); return(new IccBAcsProcessElement(inChannelCount, outChannelCount)); case IccMultiProcessElementSignature.EAcs: this.AddIndex(8); return(new IccEAcsProcessElement(inChannelCount, outChannelCount)); default: throw new InvalidIccProfileException($"Invalid MultiProcessElement type of {signature}"); } }
/// <summary> /// Initializes a new instance of the <see cref="IccMultiProcessElement"/> class. /// </summary> /// <param name="signature">The signature of this element</param> /// <param name="inChannelCount">Number of input channels</param> /// <param name="outChannelCount">Number of output channels</param> protected IccMultiProcessElement(IccMultiProcessElementSignature signature, int inChannelCount, int outChannelCount) { Guard.MustBeBetweenOrEqualTo(inChannelCount, 1, 15, nameof(inChannelCount)); Guard.MustBeBetweenOrEqualTo(outChannelCount, 1, 15, nameof(outChannelCount)); this.Signature = signature; this.InputChannelCount = inChannelCount; this.OutputChannelCount = outChannelCount; }