2

フォントファイル名を入力として受け入れ、フォントの各グリフの画像を返す1つのWindowsアプリケーション(.Net 4.0)で作業しています。考えられるすべての Google のものを試しましたが、すべてのグリフの画像を取得することはできませんでした。また、出力が間違っている画像を取得する場合。これを行う方法を教えてください...現在、次の作業がありました...

private void generateBitmaps(string strFontpath)
        {
            ////Generate font object
            GlyphTypeface font = new GlyphTypeface(new Uri(strFontpath));
            int fontSize = 22;
            int intGlyphcount = 0;
            //Collect geometry of all glyphs
            var Glyphs = from glyphIndex in font.CharacterToGlyphMap.Values
                         select font.GetGlyphOutline(glyphIndex, fontSize, 1d);
            // now create the visual we'll draw them to
            DrawingVisual viz = new DrawingVisual();
            System.Drawing.Size cellSize = new System.Drawing.Size(fontSize, Convert.ToInt32(fontSize * font.Height));
            int bitWidth = (int)Math.Ceiling(Convert.ToDecimal(cellSize.Width*10));
            int bitHeight = (int)Math.Ceiling(Convert.ToDecimal(cellSize.Height * 10));

            //using (DrawingContext dc = viz.RenderOpen())
            {
                foreach (var g in Glyphs)
                {
                    if (intGlyphcount > font.GlyphCount)
                        break;
                    //if (g.IsEmpty())
                    //    continue; // don't draw the blank ones
                    DrawingContext dc = viz.RenderOpen();                   
                    dc.PushTransform(new TranslateTransform());
                    System.Windows.Media.Pen glyphPen = new System.Windows.Media.Pen(System.Windows.Media.Brushes.Black, 1);
                    dc.DrawGeometry(System.Windows.Media.Brushes.Red, glyphPen, g);
                    //GeometryDrawing glyphDrawing = new GeometryDrawing(System.Windows.Media.Brushes.White, glyphPen, g);
                    //DrawingImage geometryImage = new DrawingImage(glyphDrawing);
                    //dc.DrawImage(geometryImage, new Rect(0, 0, 150, 150));
                    dc.Close();
                    //geometryImage.Freeze();
                    //dc.Pop(); // get rid of the transform
                    RenderTargetBitmap bmp = new RenderTargetBitmap(
                                                            200, 200,
                                                            96, 96,
                                                            PixelFormats.Pbgra32);
                    bmp.Render(viz);
                    PngBitmapEncoder encoder = new PngBitmapEncoder();
                    encoder.Frames.Add(BitmapFrame.Create(bmp));
                    using (FileStream file = new FileStream(@"GlyphList\Glyph" + intGlyphcount++ + ".png", FileMode.Create))
                        encoder.Save(file);

                    //dc.Pop();
                }

            }
            MessageBox.Show("Done");
        }
4

1 に答える 1

0

イメージとしてフォントにグリフがある場合は、外部 dll を使用します。この dll は URL
http://www.gnostice.com/XtremeFontEngine_dot_NET.aspで入手できます

于 2013-10-30T04:37:41.443 に答える