7

次のコードを使用して、ビットマップにテキストを描画しています。

using (Font font = new Font("Arial", 10.0f, FontStyle.Bold, GraphicsUnit.Point))
{
    //draw the text
    graphics.DrawString("Some text", font, Brushes.White, rect, stringFormat);
}

それはうまくいきます。レンダリングされたテキストは次のとおりです。

ここに画像の説明を入力

文字をもう少し大きくしたい。フォント サイズとして 11 を設定すると、次のようになります。

ここに画像の説明を入力

私が欲しいものには大きすぎます。10.25、10.5などを試しましたが、10と同じ結果になります。

私も設定しようとしGraphicsUnitましPixelたが、同じように動作します(カスタムフォントサイズを設定する可能性はありません)。

これが私の質問です:

GDI+ (C#) を使用してテキストを描画する場合、レンダリングされたテキストのサイズを「微調整」する可能性はありますか?


編集:より完全なコードスニペット(要求に応じて):

using (Bitmap bitmap = new Bitmap(width, height))
using (Graphics graphics = Graphics.FromImage(bitmap))     
using (Font font = new Font("Arial", 10.0f, FontStyle.Bold, GraphicsUnit.Point))
{
   graphics.SmoothingMode = SmoothingMode.AntiAlias;
   graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;

   Rectangle rect = new Rectangle(0, 0, width, height);

   //method 1
   StringFormat stringFormat = new StringFormat();
   stringFormat.Alignment = StringAlignment.Center;
   stringFormat.LineAlignment = StringAlignment.Center;
   graphics.DrawString("Some text", font, Brushes.White, rect, stringFormat);

   //method 2
   TextFormatFlags flags = TextFormatFlags.HorizontalCenter |
       TextFormatFlags.VerticalCenter | TextFormatFlags.WordBreak;       
   TextRenderer.DrawText(graphics, "Some text", font, rect, Color.White, flags);

   bitmap.Save(stream, ImageFormat.Png);          
}
4

2 に答える 2

4

C# や .Net ライブラリについてはわかりませんが、このページAntiAliasを見ると、 forを選択するTextRenderingHintとヒンティングがオフになり、アンチエイリアシングがオンになるようです。これにより、より中間のサイズが得られますが、テキストがぼやけてしまう可能性があります。

問題はフォントヒンティングです。セリフのストローク幅やサイズなどのフォントの詳細がターゲット デバイスの解像度と同じオーダーである場合、単にデザイン ユニットをデバイス ユニットにスケーリングすると、特にアンチエイリアシングがない場合に、偏った不均一なテキストが発生する可能性があります。親切。

これを避けるために、ほとんどのフォントには、解像度が制限されている場合に四捨五入するための特別なルールを与える「ヒント」があります。その効果は、サイズに「ステップ」が見えることです。

ステップを回避したい場合は、「ヒンティング」をオフにする必要があります。これにより、ラスタライザーは特別な丸め規則を無視し、デザイン単位をデバイス単位に直接スケーリングします。これにより、テキストを真に線形にスケーリングすることができます。トレードオフは、小さいサイズではテキストが適切に表示されない可能性があることです。アンチエイリアシングは対称性を向上させることができますが、多くの人にとってテキストがぼやけて見えることがあります。

于 2012-05-31T16:54:09.507 に答える