public void GetObjectData(SerializationInfo si, StreamingContext context) { MemoryStream stream = new MemoryStream(); BinaryWriter writer = new BinaryWriter(stream); writer.Write(header); Image [] images = (imageCollection != null) ? imageCollection.ToArray() : this.images; int cols = 4; int rows = images.Length / cols; if (images.Length % cols > 0) { ++rows; } writer.Write((ushort)images.Length); writer.Write((ushort)images.Length); writer.Write((ushort)0x4); writer.Write((ushort)(images [0].Width)); writer.Write((ushort)(images [0].Height)); writer.Write(0xFFFFFFFF); //BackColor.ToArgb ()); //FIXME: should set the right one here. writer.Write((ushort)0x1009); for (int i = 0; i < 4; i++) { writer.Write((short)-1); } Bitmap main = new Bitmap(cols * ImageSize.Width, rows * ImageSize.Height); using (Graphics g = Graphics.FromImage(main)) { g.FillRectangle(ThemeEngine.Current.ResPool.GetSolidBrush(BackColor), 0, 0, main.Width, main.Height); for (int i = 0; i < images.Length; i++) { g.DrawImage(images [i], (i % cols) * ImageSize.Width, (i / cols) * ImageSize.Height); } } MemoryStream tmp = new MemoryStream(); main.Save(tmp, ImageFormat.Bmp); tmp.WriteTo(stream); Bitmap mask = Get1bppMask(main); main.Dispose(); main = null; tmp = new MemoryStream(); mask.Save(tmp, ImageFormat.Bmp); tmp.WriteTo(stream); mask.Dispose(); stream = GetRLEStream(stream, 4); si.AddValue("Data", stream.ToArray(), typeof(byte [])); }