/// <summary> /// Инициализирует экземлпяр. /// </summary> private void Init() { Header = new VectHeader(); if (string.IsNullOrEmpty(Filename)) { Filename = ""; } }
/// <summary> /// Загружает вектор формата .PCV. /// </summary> /// <param name="filename">Имя файла для загрузки</param> private void LoadVectPCV(string filename) { VPointEx[][] contours = new VPointEx[0][]; string s = new string(GetBytesAndRemoveHeader(filename).Select(pp => (char)pp).ToArray()); //TODO: Это по прежнему не совместимо с PCV старого образца, с VectArch. //Нид сделать что-то по типу удаления того "хедера" и читать его. var data = s.Split(';'); var head = new VectHeader(); var header_ = data[0].Split(','); head.Width = float.Parse(header_[1], CultureInfo.InvariantCulture); head.Height = float.Parse(header_[2], CultureInfo.InvariantCulture); switch (header_[3].ToLower().Trim()) { case ("rastr"): head.VectType = VectType.Rastr; break; case ("func"): head.VectType = VectType.Func; break; case ("curve"): head.VectType = VectType.Curve; break; case ("svgvector"): head.VectType = VectType.SvgVector; break; default: throw new ArgumentException("Указан неверный тип вектора"); } //try { head.CountOfCont = int.Parse(header_[4]); } catch { throw new ArgumentException("Указано неверное число контуров вектора"); } var p = data[1].Split('?'); head.CountOfCont = p.Length; contours = new VPointEx[p.Length][]; for (int i = 0; i <= p.Length - 1; i++) { var data1 = p[i]; var data2 = data1.Split(':'); var countofpoints = data2.Length; contours[i] = new VPointEx[countofpoints - 1]; for (int ii = 0; ii <= data2.Length - 2; ii++) { var Coordinates = data2[ii].Split(','); var xs = Coordinates[0]; var ys = Coordinates[1]; contours[i][ii] = new VPointEx(float.Parse(xs, CultureInfo.InvariantCulture), float.Parse(ys, CultureInfo.InvariantCulture), 0, Color.Black); } } Helper.DeleteFromArray(contours.Length, ref contours); Header = head; RawData = contours; }
/// <summary> /// Запускает процесс векторизации для изображения <see cref="Image"></see>. /// </summary> /// <param name="Image">Изображени, которое будет обробатыватся.</param> /// <param name="WriteDebugInfo">Параметр, который определяет, будет ли выводится дебаг-информация в консоль</param> /// <param name="StreamCount">Количество потоков выполнения операции.</param> /// <returns>Возвращает вектор.</returns> public Vector Proceed(Bitmap Image, bool WriteDebugInfo = false, int StreamCount = 1) { _outputDebugInfo = WriteDebugInfo; _num = StreamCount; _proceedBitmap = Image; ImagePr(); _header = new VectHeader() { CountOfCont = _rawData.Length, Width = Image.Width, Height = Image.Height, VectType = VectType.Rastr }; var v = new Vector() { Header = _header, RawData = _rawData }; return(v); }
/// <summary> /// Загружает вектор формата .PRRES. /// </summary> /// <param name="FileName">Имя файла для загрузки.</param> private void LoadVectPrres(string FileName) { VPointEx[][] contours;// = new VPointEx[0][]; var s = File.ReadAllText(FileName); var main = s.Split('$'); var header = main[0].Split(';'); VectHeader headerr = new VectHeader(); if (header[0] == "prres") { headerr.Width = int.Parse(header[1]); headerr.Height = int.Parse(header[2]); headerr.CountOfCont = int.Parse(header[6]); headerr.VectType = VectType.Rastr; //TODO sdelat` normalnoe opredelenie tipa vectora contours = new VPointEx[headerr.CountOfCont][]; for (int i = 0; i <= headerr.CountOfCont - 1; i++) { var data1 = main[i + 1].Split('?'); var countofpoints = data1[0]; contours[i] = new VPointEx[int.Parse(countofpoints)]; var data2 = data1[1].Split(';'); for (int j = 0; j <= data2.Length - 2; j++) { var coordinates = data2[j].Split(','); var xs = coordinates[0]; Helper.Delete(ref xs, 1, 1); var ys = coordinates[1]; Helper.Delete(ref ys, ys.Length, 1); contours[i][j] = new VPointEx(int.Parse(xs), int.Parse(ys), 0, Color.Black); } } } else { return; } Header = headerr; RawData = contours; }