gpt4 book ai didi

c# - 为什么 System.Drawing + ClearType 字体有难看的黑色碎片?

转载 作者:太空宇宙 更新时间:2023-11-03 18:42:27 26 4
gpt4 key购买 nike

我正在使用下面的 C# 代码来制作一张带有文字的图片

            // Create font. Parameter is a global variable
Font objFont = new Font(fontname, fontsize, fontstyle, System.Drawing.GraphicsUnit.Pixel);

// Grab an existing image from picture box. (target is picturebox's name)
Bitmap result;
if (target.Image != null)
{
result = new Bitmap(target.Image);
}
else
{
result = new Bitmap(target.Width, target.Height);
}
Graphics objGraphics = Graphics.FromImage(result);

// And draw to it. Select a mode with check box.

objGraphics.SmoothingMode = SmoothingMode.HighQuality;
if (!checkBox1.Checked)
{
objGraphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
}
else
{
objGraphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
}
Brush b = new LinearGradientBrush(new Rectangle(new Point(x, y), objGraphics.MeasureString(text, objFont).ToSize()),color1,color2,LinearGradientMode.Vertical);

objGraphics.DrawString(text, objFont, b, x, y);
objGraphics.Save();

//Set the result to picturebox

target.Image = result;

objGraphics.Dispose();
b.Dispose();

在此代码之前,target.BackColor 已设置为所需的颜色,例如

target.BackColor = Color.Black;

这是结果:


(来源:free.in.th)

我想知道为什么 ClearType 字体在明亮的背景上看起来那么难看? (在像深紫色的 bg 上你不会注意到黑色边框,但它仍然存在)

最佳答案

    else
{
result = new Bitmap(target.Width, target.Height);
}

那是个问题,你还没有初始化位图的像素。它们将默认为 Color.Transparent。这会导致文本抗锯齿为黑色,因为 Color.Transparent 的红色、绿色和蓝色为 0。当您随后在粉红色背景下显示位图时,抗锯齿像素变得非常明显,因为它们没有被绘制为混合成粉红色的背景。它们只在黑色背景下看起来不错。

您需要使用 Graphics.Clear()。或者如果透明度是有意的,则放弃抗锯齿。

关于c# - 为什么 System.Drawing + ClearType 字体有难看的黑色碎片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7480150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com