4

私はこのコードを持っています。

    public static Image AddText(this Image image, ImageText text)
    {
        Graphics surface = Graphics.FromImage(image);
        Font font = new Font("Tahoma", 10);

        System.Drawing.SolidBrush brush = new SolidBrush(Color.Red);

        surface.DrawString(text.Text, font, brush, new PointF { X = 30, Y = 10 });

        surface.Dispose();
        return image;
    }

ただし、テキストが私の画像に描画されると、黒の境界線または影が付いた赤になります。

境界線や影のない画像にテキストを書き込むにはどうすればよいですか?

編集

追加することでこれを解決しました。

surface.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;

誰かが私がこれを必要とした理由を説明できれば、それは素晴らしいことです。

4

3 に答える 3

4

デフォルトの透明な背景を持つ新しく作成された Bitmap オブジェクトに色付きのテキストが描画されると、周囲に不完全な黒い境界線が表示されました。初期化後に graphics.Clear(Color.White) を使用することで問題を解決しました。

于 2012-04-04T08:21:29.113 に答える
3

あなたが持っているものは正しいようです。http://www.switchonthecode.com/tutorials/csharp-snippet-tutorial-how-to-draw-text-on-an-imageを参照してください

TextRenderer.DrawText を試すことができます (ただし、これは System.Windows.Forms 名前空間にあるため、不適切である可能性があることに注意してください)。

TextRenderer.DrawText(args.Graphics, text, drawFont, ClientRectangle, foreColor, backColor, TextFormatFlags.EndEllipsis | TextFormatFlags.VerticalCenter);

backColor には、Color.Transparent を使用してみてください。

また、グラフィックス、ブラシ、フォントなどを操作するときは、必ずそれらをusingステートメントでラップして、必要な期間だけ保持するようにしてください...

例えば

using (var surface = Graphics.FromImage(image))
{
    var font = ... // Build font
    using (var foreBrush = new SolidBrush(Color.Red))
    {
        ... // Do stuff with brush
    }
}
于 2010-05-20T06:14:10.010 に答える
0

国境があってはならないと思います。境界線ですか、それとも影ですか。別のフォントとフォントサイズ+ FontStyle.Regularを試してみて、違いがあるかどうかを確認してください

于 2010-05-20T05:59:23.043 に答える