/// <summary>
        /// Копировать <see cref="IMonomap"/>.
        /// </summary>
        /// <param name="monomap">Ссылка на <see cref="IMonomap"/>.</param>
        /// <returns>Ссылка на скопированный <see cref="IMonomap"/>.</returns>
        // TODO Пока не хочется <see cref="ICloneable"/> обязывать реализовывать.
        public static IMonomap Clone(this IMonomap monomap)
        {
            bool[,] newMonomap = new bool[monomap.Width, monomap.Height];
            for (int x = 0; x < monomap.Width; x++)
            {
                for (int y = 0; y < monomap.Height; y++)
                {
                    newMonomap[x, y] = monomap[x, y];
                }
            }

            return(new BitMonomap(newMonomap));
        }
        /// <summary>
        /// Создание экземпляра класса <see cref="EditMonomap"/>.
        /// </summary>
        public EditMonomap(IMonomap monomap)
        {
            // Вокруг изображения добавил рамку в 1 пиксель
            _bitmap = new bool[monomap.Width + BorderThickness, monomap.Height + BorderThickness];

            for (int x = 0; x < monomap.Width; x++)
            {
                for (int y = 0; y < monomap.Height; y++)
                {
                    _bitmap[x + Thickness, y + Thickness] = monomap[x, y];
                }
            }
        }
Beispiel #3
0
        /// <summary>
        /// Создание экземпляра класса <see cref="StretchPad"/>.
        /// </summary>
        public StretchPad(IMonomap monomap, int left = 1, int top = 1, int right = 1, int bottom = 1)
        {
            if (monomap == null)
            {
                throw new ArgumentNullException(nameof(monomap));
            }

            _monomap = monomap;
            _left    = left;
            _top     = top;
            _right   = right;
            _bottom  = bottom;
        }
        /// <summary>
        /// Преобразовать <see cref="IMonomap"/> в <see cref="Bitmap"/>.
        /// </summary>
        /// <param name="monomap">Ссылка на <see cref="IMonomap"/>.</param>
        /// <returns>Ссылка на <see cref="Bitmap"/>.</returns>
        public static Bitmap ToBitmap(this IMonomap monomap)
        {
            var bitmap = new Bitmap(monomap.Width, monomap.Height);

            for (var y = 0; y < monomap.Height; y++)
            {
                for (var x = 0; x < monomap.Width; x++)
                {
                    bitmap.SetPixel(x, y, monomap[x, y] ? Color.Black : Color.White);
                }
            }

            return(bitmap);
        }
        private void InternalGenerateEulerValue(
            char[] sourceChars,
            Font font,
            int minSize,
            int maxSize,
            List <Symbol> symbols)
        {
            foreach (char chr in sourceChars)
            {
                for (int size = minSize; size < maxSize + 1; size++)
                {
                    // TODO Что бы красиво выводить побуквенно идут по размерам каждой буквы, иначе тут лучше не вертикально а горизонтально по слою проходить
                    using (var newFont = new Font(font.FontFamily, size, font.Style, GraphicsUnit.Pixel))
                    {
                        IMonomap monomap = PrintChar(chr, newFont);
                        int      height  = GetFontHeight(monomap);

                        if (height < minSize)
                        {
                            continue;
                        }

                        var euler = EulerCharacteristicComputer.Compute2D(monomap);

                        var        chr1       = chr;
                        Symbol     symbol     = symbols.First(s => s.Chr == chr1);
                        SymbolCode symbolCode = new SymbolCode(height, euler);

                        lock (_syncObject)
                        {
                            symbol.Codes.Add(symbolCode);
                        }

                        BitmapCreated?.Invoke(this, new BitmapEventArgs(monomap.ToBitmap(), newFont, chr));
                    }
                }
            }
        }
Beispiel #6
0
 /// <summary>
 /// Создание экземпляра класса <see cref="QSymbol"/>.
 /// </summary>
 public QSymbol(IMonomap monomap, Point startPoint, EulerMonomap2D euler)
 {
     Euler      = euler;
     Monomap    = monomap;
     StartPoint = startPoint;
 }