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;
}
}