Windowsフォームのすべてのフォントですべての文字列を表示できるため、少し混乱していますが、画像として常に表示できるとは限りません。たぶん私のコードに何か問題があります。しかし、私が何をしようとしていたかをお見せしましょう。
最初に私はこれを持っています:
Label l = new Label();
l.Text = "Ì CSharp Î";
this.Font = new Font("Code 128", 80);
l.Size = new System.Drawing.Size(300, 200);
this.Controls.Add(l);
this.Size = new Size(300, 200);
さて、これは非常に問題ありません。次に、画像と同じフォントで同じ文字列を保存してみたいと思います。私はこのコードを見つけました、そして私はこれを行う方法だと思いました
private static Image DrawText(string text, Font font, Color textColor, Color backColor)
{
//first, create a dummy bitmap just to get a graphics object
Image img = new Bitmap(1, 1);
Graphics drawing = Graphics.FromImage(img);
//measure the string to see how big the image needs to be
SizeF textSize = drawing.MeasureString(text, font);
//free up the dummy image and old graphics object
img.Dispose();
drawing.Dispose();
//create a new image of the right size
img = new Bitmap((int)textSize.Width, (int)textSize.Height);
drawing = Graphics.FromImage(img);
//paint the background
drawing.Clear(backColor);
//create a brush for the text
Brush textBrush = new SolidBrush(textColor);
drawing.DrawString(text, font, textBrush, 0, 0);
drawing.Save();
textBrush.Dispose();
drawing.Dispose();
return img;
}
var i = DrawText("Ì CSharp Î", new Font("Code 128", 40), Color.Black, Color.White);
画像を保存すると、次のようになります。
理解できません。Windowsフォームで使用したのと同じ文字列と同じフォントを使用しています。どうしてこんなことに?そして、この問題を回避する方法は?
PS:私が使用しているフォントはここからダウンロードされましたが、他のフォントでもテストしたので、常に機能するとは限りませんでした。