コード例 #1
0
ファイル: Builder.cs プロジェクト: rumkex/QuickFont
        /*
        private SizeF GetMaxGlyphSize(Font font)
        {
            Bitmap bmp = new Bitmap(256, 256, PixelFormat.Format24bppRgb);
            Graphics graph = Graphics.FromImage(bmp);

            SizeF maxSize = new SizeF(0f, 0f);
            for (int i = 0; i < charSet.Length; i++)
            {
                var charSize = graph.MeasureString("" + charSet[i], font);

                if (charSize.Width > maxSize.Width)
                    maxSize.Width = charSize.Width;

                if (charSize.Height > maxSize.Height)
                    maxSize.Height = charSize.Height;
            }

            graph.Dispose();
            bmp.Dispose();

            return maxSize;
        }*/
        //The initial bitmap is simply a long thin strip of all glyphs in a row
        private Bitmap CreateInitialBitmap(Font font, SizeF maxSize, int initialMargin, out QFontGlyph[] glyphs, TextGenerationRenderHint renderHint)
        {
            glyphs = new QFontGlyph[charSet.Length];

            int spacing = (int)Math.Ceiling(maxSize.Width) + 2 * initialMargin;
            Bitmap bmp = new Bitmap(spacing * charSet.Length, (int)Math.Ceiling(maxSize.Height) + 2 * initialMargin, PixelFormat.Format24bppRgb);
            Graphics graph = Graphics.FromImage(bmp);

            switch(renderHint){
                case TextGenerationRenderHint.SizeDependent:
                    graph.TextRenderingHint = font.Size <= 12.0f  ? TextRenderingHint.ClearTypeGridFit : TextRenderingHint.AntiAlias;
                    break;
                case TextGenerationRenderHint.AntiAlias:
                    graph.TextRenderingHint = TextRenderingHint.AntiAlias;
                    break;
                case TextGenerationRenderHint.AntiAliasGridFit:
                    graph.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
                    break;
                case TextGenerationRenderHint.ClearTypeGridFit:
                    graph.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
                    break;
                case TextGenerationRenderHint.SystemDefault:
                    graph.TextRenderingHint = TextRenderingHint.SystemDefault;
                    break;
            }

            int xOffset = initialMargin;
            for (int i = 0; i < charSet.Length; i++)
            {
                graph.DrawString("" + charSet[i], font, Brushes.White, xOffset, initialMargin);
                var charSize = graph.MeasureString("" + charSet[i], font);
                glyphs[i] = new QFontGlyph(0, new Rectangle(xOffset - initialMargin, 0, (int)charSize.Width + initialMargin * 2, (int)charSize.Height + initialMargin * 2), 0, charSet[i]);
                xOffset += (int)charSize.Width + initialMargin * 2;
            }

            graph.Flush();
            graph.Dispose();

            return bmp;
        }
コード例 #2
0
ファイル: Builder.cs プロジェクト: gitter-badger/QuickFont
        /*
         * private SizeF GetMaxGlyphSize(Font font)
         * {
         *  Bitmap bmp = new Bitmap(256, 256, PixelFormat.Format24bppRgb);
         *  Graphics graph = Graphics.FromImage(bmp);
         *
         *  SizeF maxSize = new SizeF(0f, 0f);
         *  for (int i = 0; i < charSet.Length; i++)
         *  {
         *      var charSize = graph.MeasureString("" + charSet[i], font);
         *
         *      if (charSize.Width > maxSize.Width)
         *          maxSize.Width = charSize.Width;
         *
         *      if (charSize.Height > maxSize.Height)
         *          maxSize.Height = charSize.Height;
         *  }
         *
         *  graph.Dispose();
         *  bmp.Dispose();
         *
         *  return maxSize;
         * }*/

        //The initial bitmap is simply a long thin strip of all glyphs in a row
        private Bitmap CreateInitialBitmap(Font font, SizeF maxSize, int initialMargin, out QFontGlyph[] glyphs, TextGenerationRenderHint renderHint)
        {
            glyphs = new QFontGlyph[charSet.Length];

            int      spacing = (int)Math.Ceiling(maxSize.Width) + 2 * initialMargin;
            Bitmap   bmp     = new Bitmap(spacing * charSet.Length, (int)Math.Ceiling(maxSize.Height) + 2 * initialMargin, PixelFormat.Format24bppRgb);
            Graphics graph   = Graphics.FromImage(bmp);

            switch (renderHint)
            {
            case TextGenerationRenderHint.SizeDependent:
                graph.TextRenderingHint = font.Size <= 12.0f  ? TextRenderingHint.ClearTypeGridFit : TextRenderingHint.AntiAlias;
                break;

            case TextGenerationRenderHint.AntiAlias:
                graph.TextRenderingHint = TextRenderingHint.AntiAlias;
                break;

            case TextGenerationRenderHint.AntiAliasGridFit:
                graph.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
                break;

            case TextGenerationRenderHint.ClearTypeGridFit:
                graph.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
                break;

            case TextGenerationRenderHint.SystemDefault:
                graph.TextRenderingHint = TextRenderingHint.SystemDefault;
                break;
            }

            int xOffset = initialMargin;

            for (int i = 0; i < charSet.Length; i++)
            {
                graph.DrawString("" + charSet[i], font, Brushes.White, xOffset, initialMargin);
                var charSize = graph.MeasureString("" + charSet[i], font);
                glyphs[i] = new QFontGlyph(0, new Rectangle(xOffset - initialMargin, 0, (int)charSize.Width + initialMargin * 2, (int)charSize.Height + initialMargin * 2), 0, charSet[i]);
                xOffset  += (int)charSize.Width + initialMargin * 2;
            }

            graph.Flush();
            graph.Dispose();

            return(bmp);
        }
コード例 #3
0
        /// <summary>
        /// Creates the initial font bitmap. This is simply a long thin strip of all glyphs in a row
        /// </summary>
        /// <param name="font">The <see cref="IFont"/> object to build the initial bitmap from</param>
        /// <param name="maxSize">The maximum glyph size of the font</param>
        /// <param name="initialMargin">The initial bitmap margin (used for all four sides)</param>
        /// <param name="glyphs">A collection of <see cref="QFontGlyph"/>s corresponding to the initial bitmap</param>
        /// <param name="renderHint">The font rendering hint to use</param>
        /// <returns></returns>
        private Bitmap CreateInitialBitmap(IFont font, SizeF maxSize, int initialMargin, out QFontGlyph[] glyphs, TextGenerationRenderHint renderHint)
        {
            glyphs = new QFontGlyph[_charSet.Length];

            int      spacing = (int)Math.Ceiling(maxSize.Width) + 2 * initialMargin;
            Bitmap   bmp     = new Bitmap(spacing * _charSet.Length, (int)Math.Ceiling(maxSize.Height) + 2 * initialMargin, PixelFormat.Format24bppRgb);
            Graphics graph   = Graphics.FromImage(bmp);

            switch (renderHint)
            {
            case TextGenerationRenderHint.SizeDependent:
                graph.TextRenderingHint = font.Size <= 12.0f  ? TextRenderingHint.ClearTypeGridFit : TextRenderingHint.AntiAlias;
                break;

            case TextGenerationRenderHint.AntiAlias:
                graph.TextRenderingHint = TextRenderingHint.AntiAlias;
                break;

            case TextGenerationRenderHint.AntiAliasGridFit:
                graph.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
                break;

            case TextGenerationRenderHint.ClearTypeGridFit:
                graph.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
                break;

            case TextGenerationRenderHint.SystemDefault:
                graph.TextRenderingHint = TextRenderingHint.SystemDefault;
                break;
            }

            // enable high quality graphics
            graph.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            graph.SmoothingMode      = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            graph.CompositingMode    = System.Drawing.Drawing2D.CompositingMode.SourceOver;

            int xOffset = initialMargin;

            for (int i = 0; i < _charSet.Length; i++)
            {
                var offset   = font.DrawString("" + _charSet[i], graph, Brushes.White, xOffset, initialMargin);
                var charSize = font.MeasureString("" + _charSet[i], graph);
                glyphs[i] = new QFontGlyph(0, new Rectangle(xOffset - initialMargin + offset.X, initialMargin + offset.Y, (int)charSize.Width + initialMargin * 2, (int)charSize.Height + initialMargin * 2), 0, _charSet[i]);
                xOffset  += (int)charSize.Width + initialMargin * 2;
            }

            graph.Flush();
            graph.Dispose();

            return(bmp);
        }