Beispiel #1
0
        internal void ReadLutBToATagDataEntry(byte[] data, IccLutBToATagDataEntry expected)
        {
            IccDataReader reader = CreateReader(data);

            IccLutBToATagDataEntry output = reader.ReadLutBtoATagDataEntry();

            Assert.Equal(expected, output);
        }
        internal void WriteLutBToATagDataEntry(byte[] expected, IccLutBToATagDataEntry data)
        {
            IccDataWriter writer = CreateWriter();

            writer.WriteLutBtoATagDataEntry(data);
            byte[] output = writer.GetData();

            Assert.Equal(expected, output);
        }
        /// <summary>
        /// Writes a <see cref="IccLutBToATagDataEntry"/>
        /// </summary>
        /// <param name="value">The entry to write</param>
        /// <returns>The number of bytes written</returns>
        public int WriteLutBtoATagDataEntry(IccLutBToATagDataEntry value)
        {
            long start = this.dataStream.Position - 8;  // 8 is the tag header size

            int count = this.WriteByte((byte)value.InputChannelCount);

            count += this.WriteByte((byte)value.OutputChannelCount);
            count += this.WriteEmpty(2);

            long bCurveOffset = 0;
            long matrixOffset = 0;
            long mCurveOffset = 0;
            long clutOffset   = 0;
            long aCurveOffset = 0;

            // Jump over offset values
            long offsetpos = this.dataStream.Position;

            this.dataStream.Position += 5 * 4;

            if (value.CurveB != null)
            {
                bCurveOffset = this.dataStream.Position;
                count       += this.WriteCurves(value.CurveB);
                count       += this.WritePadding();
            }

            if (value.Matrix3x1 != null && value.Matrix3x3 != null)
            {
                matrixOffset = this.dataStream.Position;
                count       += this.WriteMatrix(value.Matrix3x3.Value, false);
                count       += this.WriteMatrix(value.Matrix3x1.Value, false);
                count       += this.WritePadding();
            }

            if (value.CurveM != null)
            {
                mCurveOffset = this.dataStream.Position;
                count       += this.WriteCurves(value.CurveM);
                count       += this.WritePadding();
            }

            if (value.ClutValues != null)
            {
                clutOffset = this.dataStream.Position;
                count     += this.WriteClut(value.ClutValues);
                count     += this.WritePadding();
            }

            if (value.CurveA != null)
            {
                aCurveOffset = this.dataStream.Position;
                count       += this.WriteCurves(value.CurveA);
                count       += this.WritePadding();
            }

            // Set offset values
            long lpos = this.dataStream.Position;

            this.dataStream.Position = offsetpos;

            if (bCurveOffset != 0)
            {
                bCurveOffset -= start;
            }

            if (matrixOffset != 0)
            {
                matrixOffset -= start;
            }

            if (mCurveOffset != 0)
            {
                mCurveOffset -= start;
            }

            if (clutOffset != 0)
            {
                clutOffset -= start;
            }

            if (aCurveOffset != 0)
            {
                aCurveOffset -= start;
            }

            count += this.WriteUInt32((uint)bCurveOffset);
            count += this.WriteUInt32((uint)matrixOffset);
            count += this.WriteUInt32((uint)mCurveOffset);
            count += this.WriteUInt32((uint)clutOffset);
            count += this.WriteUInt32((uint)aCurveOffset);

            this.dataStream.Position = lpos;
            return(count);
        }