/// <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}");
            }
        }
Exemplo n.º 2
0
        /// <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;
        }