ScrGen.Icon.IcoContainer.ToStream C# (CSharp) Method

ToStream() public method

public ToStream ( Stream icoStream, bool arrange = true ) : void
icoStream Stream
arrange bool
return void
        public void ToStream(Stream icoStream, bool arrange = true)
        {
            if (icoStream == null)
                throw new ArgumentNullException("icoStream");

            if (!icoStream.CanWrite)
                throw new ArgumentException("Can't write to stream", "icoStream");

            Validate();

            var pairs = GetEntryImageOrderedPairs();

            if (arrange)
                Arrange();
            else
            {
                if (pairs.Any(t => t.Item1.BytesInRes != (uint)t.Item2.Size))
                    throw new InvalidOperationException("Directory Entries BytesInRes does not equal to Images Data count");
            }

            // write directory
            Directory.ToStream(icoStream);

            // write images
            for (int i = 0, offset = Directory.Size; i < pairs.Length; i++)
            {
                var entry = pairs[i].Item1;
                var image = pairs[i].Item2;

                var zeros = new byte[(int)entry.ImageOffset - offset];
                icoStream.Write(zeros, 0, zeros.Length);

                image.ToStream(icoStream);
                offset = (int)entry.ImageOffset + image.Size;
            }
        }