/// <summary> /// Метод создания копий цифр с искажениями из стокового Canvas /// </summary> /// <param name="canvas">Стоковый Canvas</param> /// <param name="canvasChildren">Дочерние элементы передаваемого Canvas</param> /// <param name="count">Кол-во копий с преобразованиями</param> /// <param name="scenario">Сценарий генерации</param> /// <param name="progressViewModel">Загрузка (для изменения на view progressbar)</param> private void CreateMnistData(string canvas, List <string> canvasChildren, int count, SettingsScenario scenario, ProgressViewModel progressViewModel) { for (int k = 0; k < count; k++) { // делаем копию канваса из вьюхи, чтобы не затронуть шаблонный для последующий копий Canvas root = (UIElement)XamlReader.Parse(canvas) as Canvas; // преобразуем дочерние элементы canvas из string в UIElement, и добавляем в root canvasChildren.ForEach(x => root.Children.Add(XamlReader.Parse(x) as UIElement)); var parametrs = new NumProperties { Rotate = random.Next(scenario.RotateMin, scenario.RotateMax), ShiftX = random.Next(scenario.ShiftMinX, scenario.ShiftMaxX), ShiftY = random.Next(scenario.ShiftMinY, scenario.ShiftMaxY), SkewX = random.Next(scenario.SkewMinX, scenario.SkewMaxX), SkewY = random.Next(scenario.SkewMinY, scenario.SkewMaxY), ScaleX = GetRandomNumber(scenario.ScaleMinX, scenario.ScaleMaxX), ScaleY = GetRandomNumber(scenario.ScaleMinY, scenario.ScaleMaxY), }; var img = GetBitmapNumber( canvas: root, canvasWidth: (int)root.Width, canvasHeight: (int)root.Height, sizeImg: SIZE, rotate: parametrs.Rotate, scaleX: parametrs.ScaleX, scaleY: parametrs.ScaleY, shiftX: parametrs.ShiftX, shiftY: parametrs.ShiftY, skewX: parametrs.SkewX, skewY: parametrs.SkewY ); var nameNumber = ""; //string.Concat(root.Name.Last().ToString(), "-", Guid.NewGuid()); var number = root.Name.Last().ToString(); var line = st.ConvertToCsv(img, number, SIZE); var model = new Number { Num = number, Value = line, NumProperties = parametrs }; lock (threadLock) { SingletonContext.Context.Numbers.Add(model); SingletonContext.Context.SaveChanges(); nameNumber = model.Id.ToString(); st.SaveToCsvFile(strFilePath, line); progressViewModel.TotalNumber++; } st.SaveImage(img, nameNumber, path); } }