Пример #1
0
        private void FillSampleData(Bitmap pattern, byte[] sampleData, EnumerationStyle enumerationStyle)
        {
            var bitArray      = sampleData.ToBitArray();
            int bitArrayIndex = 0;


            var columnCount = (pattern.Width + _settings.DelimeterWidth) /
                              (_settings.SymbolWidth + _settings.DelimeterWidth);
            var rowCount = (pattern.Height + _settings.DelimeterHeight) /
                           (_settings.SymbolHeight + _settings.DelimeterHeight);

            var pixelTracker = new BitmapPixelTracker(_settings.CellsLookupDirection)
            {
                // Skip first row and columnt if they were used for rows/columns numbers
                XStart = enumerationStyle == EnumerationStyle.None? 0: 1,
                XEnd   = columnCount,
                XDelta = 1,
                // Skip first row and columnt if they were used for rows/columns numbers
                YStart = enumerationStyle == EnumerationStyle.None? 0: 1,
                YEnd   = rowCount,
                YDelta = 1
            };

            // Process cells
            // in this case pixel coords will correspond to cell
            foreach (var pixel in pixelTracker)
            {
                // get symbol top leftPoint
                var symbolX = pixel.X * (_settings.DelimeterWidth + _settings.SymbolWidth);
                var symbolY = pixel.Y * (_settings.DelimeterHeight + _settings.SymbolHeight);
                FillSymbol(symbolX, symbolY, pattern, bitArray, ref bitArrayIndex);
            }
        }
Пример #2
0
        /// <summary>
        /// Fills bitmap with solid color and draws a grid on it
        /// </summary>
        /// <param name="patternWidthCount">width of grid in symbols (cells)</param>
        /// <param name="patternHeightCount">height of grid in symbols (cells)</param>
        /// <returns>production ready bitmap</returns>
        public Bitmap GeneratePattern(int patternWidthCount, int patternHeightCount,
                                      EnumerationStyle enumerationStyle, byte[] sampleData = null)
        {
            if (enumerationStyle != EnumerationStyle.None)
            {
                patternHeightCount++;
                patternWidthCount++;
            }

            var pattentWidth = patternWidthCount * _settings.SymbolWidth +
                               (patternWidthCount - 1) * _settings.DelimeterWidth;
            var patternHeight = patternHeightCount * _settings.SymbolHeight +
                                (patternHeightCount - 1) * _settings.DelimeterHeight;
            var pattern = new Bitmap(pattentWidth, patternHeight);

            ConsoleLogger.WriteMessage($"Generating pattern\nBitmap size {pattentWidth} x {patternHeight} px", MessageType.Info);

            FillBackground(pattern);
            DrawVerticalLines(pattern);
            DrawHorizontalLines(pattern);
            Enumerate(pattern, enumerationStyle);
            if (sampleData != null)
            {
                FillSampleData(pattern, sampleData, enumerationStyle);
            }
            return(pattern);
        }
Пример #3
0
        /// <summary>
        /// Draws line and column numbers
        /// </summary>
        /// <param name="pattern">bitmap to draw in</param>
        /// <param name="enumerationStyle">style of digits</param>
        private void Enumerate(Bitmap pattern, EnumerationStyle enumerationStyle)
        {
            // 72 pixels in one pt
            const int    pixelsPerPoint = 72;
            const string fontName       = "Pixie.Resources.XpaiderPE.TTF";

            if (enumerationStyle == EnumerationStyle.None)
            {
                return;
            }

            var graphics = Graphics.FromImage(pattern);

            // rows and column numbers will be 0.75 of symbol size
            var fontSize = (float)(_settings.SymbolHeight * 0.75 * pixelsPerPoint / pattern.VerticalResolution);

            var font  = GetCustomFont(fontName, fontSize);
            var brush = new SolidBrush(_delimeterColor);

            // select string format specifier based on enumeration style
            var numbersStyle = enumerationStyle == EnumerationStyle.Hex ? "X" : "D2";

            // we use 6px sized font so we don't need any anti-aliasing
            graphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixel;

            var rowHeight   = _settings.SymbolHeight + _settings.DelimeterHeight;
            var columnWidth = _settings.SymbolWidth + _settings.DelimeterWidth;

            // Enumerate rows
            for (int rowNumber = 0, i = rowHeight;
                 i < pattern.Height;
                 i += rowHeight, rowNumber++)
            {
                graphics.DrawString(rowNumber.ToString(numbersStyle), font, brush,
                                    new RectangleF(0 - 1, i - 1, _settings.SymbolWidth, _settings.SymbolHeight));
            }

            // Enumerate columns
            for (int columnNumber = 0, i = columnWidth;
                 i < pattern.Width;
                 i += columnWidth, columnNumber++)
            {
                graphics.DrawString(columnNumber.ToString(numbersStyle), font, brush,
                                    new RectangleF(i - 1, 0 - 1, _settings.SymbolWidth, _settings.SymbolHeight));
            }
        }
Пример #4
0
        /// <summary>
        /// Draws line and column numbers
        /// </summary>
        /// <param name="pattern">bitmap to draw in</param>
        /// <param name="enumerationStyle">style of digits</param>
        private void Enumerate(Bitmap pattern, EnumerationStyle enumerationStyle)
        {
            // 72 pixels in one pt
            const int PixelsPerPoint = 72;

            if (enumerationStyle == EnumerationStyle.None)
            {
                return;
            }

            var graphics = Graphics.FromImage(pattern);

            // rows and column numbers will 2 times smaller
            var fontSize = (float)(_settings.SymbolHeight * 0.5 * PixelsPerPoint / pattern.VerticalResolution);
            // align vertically in center
            int topPadding = _settings.SymbolHeight / 4 - 1;

            var font  = new Font(FontFamily.GenericMonospace, fontSize);
            var brush = new SolidBrush(_delimeterColor);

            // select string format specifier based on enumeration style
            var numbersStyle = enumerationStyle == EnumerationStyle.Hex ? "X" : "D2";

            // make numbers more readable on low resolutions
            graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;

            // Enumerate rows
            for (int rowHeight = _settings.SymbolHeight + _settings.DelimeterHeight, rowNumber = 0, i = rowHeight;
                 i < pattern.Height;
                 i += rowHeight)
            {
                graphics.DrawString(rowNumber++.ToString(numbersStyle), font, brush, 0, i + topPadding);
            }

            // Enumerate columns
            for (int columnWidth = _settings.SymbolWidth + _settings.DelimeterWidth, columnNumber = 0, i = columnWidth;
                 i < pattern.Width;
                 i += columnWidth)
            {
                graphics.DrawString(columnNumber++.ToString(numbersStyle), font, brush, i, topPadding);
            }
        }