private void ReadTagData(byte[] prflData)
 {
     TagElementData = new List <ICCTagData>((int)TagTable.TagCount);
     for (int i = 0; i < TagTable.TagCount; i++)
     {
         ICCTagData data = ICCTagData.ReadTagData(prflData, TagTable.Tags[i], Header);
         TagElementData.Add(data);
     }
 }
        private static ICCTagData ReadTagData(TypeSignature type, byte[] iccData, int index,
                                              ICCHeader header)
        {
            ICCTagData t = null;

            switch (type)
            {
            case TypeSignature.chromaticity:
                t = new ChromaticityTag();
                break;

            case TypeSignature.colorantOrder:
                t = new ColorantOrderTag();
                break;

            case TypeSignature.colorantTable:
                t = new ColorantTableTag();
                break;

            case TypeSignature.curve:
                t = new CurveTag();
                break;

            case TypeSignature.data:
                t = new DataTag();
                break;

            case TypeSignature.dateTime:
                t = new DateTimeTag();
                break;

            case TypeSignature.lut16:
                t = new Lut16Tag();
                break;

            case TypeSignature.lut8:
                t = new Lut8Tag();
                break;

            case TypeSignature.lutAToB:
                t = new LutAToBTag();
                break;

            case TypeSignature.lutBToA:
                t = new LutBToATag();
                break;

            case TypeSignature.measurement:
                t = new MeasurementTag();
                break;

            case TypeSignature.multiLocalizedUnicode:
                t = new MultiLocalizedUnicodeTag()
                {
                    IsPlaceHolder = false
                };

                break;

            case TypeSignature.multiProcessElements:
                t = new MultiProcessElementsTag();
                break;

            case TypeSignature.namedColor2:
                t = new NamedColor2Tag();
                break;

            case TypeSignature.parametricCurve:
                t = new ParametricCurveTag();
                break;

            case TypeSignature.profileSequenceDesc:
                t = new ProfileSequenceDescTag();
                break;

            case TypeSignature.profileSequenceIdentifier:
                t = new ProfileSequenceIdentifierTag();
                break;

            case TypeSignature.responseCurveSet16:
                t = new ResponseCurveSet16Tag();
                break;

            case TypeSignature.s15Fixed16Array:
                t = new s15Fixed16ArrayTag();
                break;

            case TypeSignature.signature:
                t = new SignatureTag();
                break;

            case TypeSignature.text:
                t = new TextTag();
                break;

            case TypeSignature.u16Fixed16Array:
                t = new u16Fixed16ArrayTag();
                break;

            case TypeSignature.uInt16Array:
                t = new uInt16ArrayTag();
                break;

            case TypeSignature.uInt32Array:
                t = new uInt32ArrayTag();
                break;

            case TypeSignature.uInt64Array:
                t = new uInt64ArrayTag();
                break;

            case TypeSignature.uInt8Array:
                t = new uInt8ArrayTag();
                break;

            case TypeSignature.viewingConditions:
                t = new ViewingConditionTag();
                break;

            case TypeSignature.XYZ:
                t = new XYZTag();
                break;
            }
            t.GetTagData(iccData, index, header);
            return(t);
        }