素晴らしい質問があります。すべての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);
}
}