public List <byte> ToBytes() { List <byte> result = new List <byte>(); result.AddRange(LayerName.ToBytes()); result.AddRange(LayerPosition.ToBytes()); if (LayerBmpFrame == null) { result.AddRange(BitConverter.GetBytes((Int32)0)); } else { result.AddRange(BitConverter.GetBytes((Int32)LayerBmpFrame.PixelWidth)); result.AddRange(BitConverter.GetBytes((Int32)LayerBmpFrame.PixelHeight)); int stride = LayerBmpFrame.PixelWidth * (LayerBmpFrame.Format.BitsPerPixel / 8); byte[] data = new byte[LayerBmpFrame.PixelHeight * stride]; result.AddRange(BitConverter.GetBytes((Int32)data.Length)); LayerBmpFrame.CopyPixels(data, stride, 0); result.AddRange(data); } return(result); }