.Netでテキストを描画することについていくつかのテストを行っていますが、次の結果が得られました。
FlatStyle
がSystem
に設定されたネイティブラベルです。Graphics.DrawString()
メソッドを使用して描画されますTextRenderer.DrawText()
メソッドを使用して描画されますすべての場合、デフォルトのWindows Vista/7フォントを使用します:Segoe UI、9
ご覧のとおり、2番目の文字列と他の文字列には違いがあります(品質が低く、アンチエイリアスが異なります)。 Graphics
オブジェクトでアンチエイリアスとスムージングモードを構成しようとしましたが、結果はありませんでした。
Graphics.DrawString
を使用してテキストを描画し、他の方法と同じ品質を得ることができますか?
前もって感謝します。
編集:Reflectorでコードを確認しました。 Graphics.DrawString
がメソッドGdipDrawString()を呼び出すgdiplus.dllを使用し、TextRenderer.DrawText
がを使用することに気付きました)user32.dllDrawTextExW
およびDrawTextExA
を呼び出します。
それについて何かコメントはありますか?
GDI +は、解像度に依存しないテキストをレンダリングするMicrosoftの最初の試みでした。そして、.NET1.xでテキストをレンダリングする唯一の方法。 .NET 2.0でのTextRendererとApplication.SetCompatibleTextRenderingDefault()の導入に影響を与え、品質の問題で広くパンされました。テキストの描画にGDIを使用し、問題を効果的に解決します。高解像度デバイスでのみGraphics.DrawString()を使用する必要があります。プリンター。
Fwiw、2番目の試みはWPFでしたが、あいまいなテキストの問題についても多くの問題がありました。 .NET4で解決されました。
このサンプルフォームを試して、最悪の問題の1つを確認してください。
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e) {
e.Graphics.DrawString("Hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
this.Font, Brushes.Black, 0, 0);
}
}
次のコードは、MSDNの例からのものです。
var fontFamily = new FontFamily("Times New Roman");
var font = new Font(fontFamily, 32, FontStyle.Regular, GraphicsUnit.Pixel);
var solidBrush = new SolidBrush(Color.FromArgb(255, 0, 0, 255));
e.Graphics.TextRenderingHint = TextRenderingHint.AntiAlias;
e.Graphics.DrawString("Your Text Here", font, solidBrush, new PointF(10, 60));
私はこれをテストしました、そしてそれはうまくいきました、滑らかなテキストが私のフォームに描かれました! ;)これが 記事 へのリンクです。
Graphics.DrawString
メソッドは System.Drawing
名前空間にあります。つまり、TextRenderer.DrawText
メソッドが使用しているGDIの代わりにGDI +を内部で使用します。
この場合の違いの具体的な原因はアンチエイリアシングのようです。 Graphics.TextRenderingHint
プロパティを使用してアンチエイリアシングを制御できます。
graphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit;
Abbasが示した方法を使用して、フォントごとに無効にすることもできると思います。
あなたの場合はおそらくより正しい他の提案とは別に、画像のオクトリーベースの量子化を使用することもできます。テキストではなく、通常の写真に使用します。これについて詳しく説明し、プロジェクトの例があるMicrosoftの記事があります: http://msdn.Microsoft.com/en-us/library/aa479306.aspx