示例#1
0
 /// <summary>
 /// Инициализирует экземлпяр.
 /// </summary>
 private void Init()
 {
     Header = new VectHeader();
     if (string.IsNullOrEmpty(Filename))
     {
         Filename = "";
     }
 }
示例#2
0
        /// <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;
        }
示例#3
0
        /// <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);
        }
示例#4
0
        /// <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;
        }