素晴らしい質問があります。すべてのGoogleとMSDNを検索しましたが、何も見つかりませんでした。
フォントを文字ごとに1つのPNG画像にエクスポートするプログラムを実行しようとしています。現在、新しいWindowsフォントであるSegoeUISymbolを使用してテストしています。私はフォントのライセンス条項を知っており、そのフォントをインターネットで配布しないことに注意してください。
DrawStringさて、本当の問題は、のメンバーであるメソッドを呼び出すときに発生していますGraphics。Unicode整数値を文字に変換してから文字列に変換します。私はすでに整数をcharに変換しようとchar.ConvertFromUtf32()しましConvert.ToChar()た。
プログラムは26文字(57344 = 0xE000から開始)で正常に動作しています。57370まで数値を使用しても問題は発生しません。この後、白いボックス文字で書かれていない数字は1つもありません。
いくつか検索した後Font、属性を持つコンストラクターへのオーバーロードを見つけ、gdiCharsetその値を2として使用しようとしましたが、何も起こりませんでした。
以下にソースコードを示します。どうか、助けてくれる人がいれば嬉しいです。
UPDATE
エスケープシーケンスを使用すると("\uE1FF"char変換の代わりに機能します!しかし、forループ内でエスケープシーケンスを作成する方法がわかりません。
        Font segoe = new Font("Segoe UI Symbol", 800, FontStyle.Regular, GraphicsUnit.Pixel, 2);
        Bitmap bmedidor = new Bitmap(1000, 1000, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
        Graphics gmedidor = Graphics.FromImage(bmedidor);
        // This line below doesn't matter, see the method DrawString
        Size tamanho = gmedidor.MeasureString(char.ConvertFromUtf32(57344).ToString(), segoe).ToSize();
        int[] reducoes = new int[6] {512, 256, 128, 64, 32, 16};
        string caminho = "C:\\InoMetro";
        for (int u = 57344; u < 57896; u++)
        {
            Bitmap caractere = new Bitmap(tamanho.Width, tamanho.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            Graphics criador = Graphics.FromImage(caractere);
            criador.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            criador.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
            criador.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            criador.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            // Here we have the problem
            criador.DrawString(Convert.ToChar(u).ToString(), segoe, new SolidBrush(Color.Black), new PointF(0, 0));
            for (int r = 0; r < reducoes.Length; r++)
            {
                int taR = reducoes[r];
                Bitmap reducao = new Bitmap(taR, taR, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
                Graphics redutor = Graphics.FromImage(reducao);
                redutor.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                redutor.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
                redutor.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                redutor.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
                redutor.DrawImage(caractere, 0, 0, taR, taR);
                reducao.Save(caminho + "\\" + taR.ToString() + "\\" + u.ToString() + ".png", System.Drawing.Imaging.ImageFormat.Png);
            }
        }