簡體   English   中英

如何使用Graphics.DrawString繪制完全單色的文本?

[英]How to draw completely monocolor text with use of Graphics.DrawString?

Bitmap bmp = new Bitmap(300, 50);
Graphics gfx = Graphics.FromImage(bmp);
gfx.DrawString("Why I have black outer pixels?", new Font("Verdana", 14),
    new SolidBrush(Color.White), 0, 0);
gfx.Dispose();
bmp.Save(Application.StartupPath + "\\test.png", ImageFormat.Png);

在此處輸入圖片說明

我需要文字完全是白色的。 我嘗試了不同的畫筆,例如Br​​ushes.White等,但都不好。 我能做什么? 所有文本像素必須為白色,只是不透明度會發生變化。

解決:(結合使用textrenderinghints和拉繩)

        Bitmap bmp = new Bitmap(300, 50);
        Graphics gfx = Graphics.FromImage(bmp);

        gfx.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
        gfx.DrawString("Why I have black outer pixels?", new Font("Verdana", 14),
            new SolidBrush(Color.White), 0, 0);
        gfx.Dispose();
        bmp.Save(Application.StartupPath + "\\test.png", ImageFormat.Png);

這是因為位圖的背景是透明的黑色。 繪制之前,嘗試使其成為透明的白色:

gfx.Clear(Color.FromArgb(0, 255, 255, 255));

顯然,這沒有任何改變。 請改用TextRenderer.DrawText 它允許您指定背景色:

TextRenderer.DrawText(gfx, "text", font, point, foreColor, backColor);

但是,它可能只是填充文本矩形。 我不確定。 或使用不具有gfx.Clear(...)TextRenderer.DrawText重載,重復上述操作( gfx.Clear(...) )。

gfx.Clear(Color.FromArgb(1, 255, 255, 255));
TextRenderer.DrawText(gfx, "text", font, point, Color.White)

所有這些技巧似乎根本沒有效果。 剩下的唯一選項似乎是禁用抗鋸齒。 對於非文本繪圖(直線圓等),使用SmoothingMode進行;對於文本渲染,使用TextRenderingHint完成。

gfx.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit; // For text
gfx.SmoothingMode = SmoothingMode.None; // For geometrical objects

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM