コード例 #1
0
        public void Import(FontDescription options)
        {
            var factory = new DirectWrite.Factory();

            DirectWrite.Font font = null;

            using (var fontCollection = factory.GetSystemFontCollection(false))
            {
                int index;
                if (!fontCollection.FindFamilyName(options.FontName, out index))
                {
                    // Lets try to import System.Drawing for old system bitmap fonts (like MS Sans Serif)
                    throw new FontException(string.Format("Can't find font '{0}'.", options.FontName));
                }

                using (var fontFamily = fontCollection.GetFontFamily(index))
                {
                    var weight = FontWeight.Regular;
                    var style  = DirectWrite.FontStyle.Normal;
                    switch (options.Style)
                    {
                    case FontStyle.Bold:
                        weight = FontWeight.Bold;
                        break;

                    case FontStyle.Italic:
                        weight = FontWeight.Regular;
                        style  = DirectWrite.FontStyle.Italic;
                        break;

                    case FontStyle.Regular:
                        weight = FontWeight.Regular;
                        break;
                    }

                    font = fontFamily.GetFirstMatchingFont(weight, DirectWrite.FontStretch.Normal, style);
                }
            }

            var fontFace    = new FontFace(font);
            var fontMetrics = fontFace.Metrics;

            // Create a bunch of GDI+ objects.
            var fontSize = PointsToPixels(options.Size);

            // Which characters do we want to include?
            var characters = CharacterRegion.Flatten(options.CharacterRegions);

            var glyphList = new List <Glyph>();

            // Store the font height.
            LineSpacing = (float)(fontMetrics.LineGap + fontMetrics.Ascent + fontMetrics.Descent) / fontMetrics.DesignUnitsPerEm * fontSize;

            var baseLine = (float)(fontMetrics.LineGap + fontMetrics.Ascent) / fontMetrics.DesignUnitsPerEm * fontSize;

            // Rasterize each character in turn.
            foreach (char character in characters)
            {
                var glyph = ImportGlyph(factory, fontFace, character, fontMetrics, fontSize, options.AntiAlias);
                glyph.YOffset += baseLine;

                glyphList.Add(glyph);
            }

            Glyphs = glyphList;

            factory.Dispose();
        }
コード例 #2
0
ファイル: TrueTypeImporter.cs プロジェクト: netonjm/SharpDX
        public void Import(FontDescription options)
        {
            //ImportBitmapFonts(options);
            //return;
            var factory = new DirectWrite.Factory();
            DirectWrite.Font font = null;

            using (var fontCollection = factory.GetSystemFontCollection(false))
            {
                int index;
                if(!fontCollection.FindFamilyName(options.FontName, out index))
                {
                    // Lets try to import System.Drawing for old system bitmap fonts (like MS Sans Serif)
                    throw new FontException(string.Format("Can't find font '{0}'.", options.FontName));
                }

                using(var fontFamily = fontCollection.GetFontFamily(index))
                {
                    var weight = FontWeight.Regular;
                    var style = DirectWrite.FontStyle.Normal;
                    switch(options.Style)
                    {
                        case FontStyle.Bold:
                            weight = FontWeight.Bold;
                            break;
                        case FontStyle.Italic:
                            weight = FontWeight.Regular;
                            style = DirectWrite.FontStyle.Italic;
                            break;
                        case FontStyle.Regular:
                            weight = FontWeight.Regular;
                            break;
                    }

                    font = fontFamily.GetFirstMatchingFont(weight, DirectWrite.FontStretch.Normal, style);
                }
            }

            var fontFace = new FontFace(font);
            var fontMetrics = fontFace.Metrics;

            // Create a bunch of GDI+ objects.
            var fontSize = PointsToPixels(options.Size);
            
            // Which characters do we want to include?
            var characters = CharacterRegion.Flatten(options.CharacterRegions);

            var glyphList = new List<Glyph>();

            // Store the font height.
            LineSpacing = (float)Math.Round((float)(fontMetrics.LineGap + fontMetrics.Ascent + fontMetrics.Descent) / fontMetrics.DesignUnitsPerEm * fontSize);

            var baseLine = (float)Math.Round((float)(fontMetrics.LineGap + fontMetrics.Ascent) / fontMetrics.DesignUnitsPerEm * fontSize);

            // If font size <= 13, use aliased fonts instead
            bool activateAntiAliasDetection = options.Size > 13;

            // Rasterize each character in turn.
            foreach (char character in characters)
            {
                var glyph = ImportGlyph(factory, fontFace, character, fontMetrics, fontSize, activateAntiAliasDetection);
                glyph.YOffset += baseLine;

                glyphList.Add(glyph);
            }

            Glyphs = glyphList;

        }