delphi – TCanvas上的“附加”文本渲染?

delphi – TCanvas上的“附加”文本渲染?,第1张

概述令我惊讶的是,我发现在TCanvas上重复渲染文本在某种程度上是“附加的”.我意识到设置Canvas.Brush.Style:=bsClear是导致问题的原因,但我确实需要透明地重复呈现文本(即在OnPaint事件中).执行此 *** 作后,文本看起来不太好. 我怎么能避免这种情况? 这是一些示例代码;如果你在名为btn1的TButton上点击几下,就可以看到效果. procedure TForm1.bt 令我惊讶的是,我发现在TCanvas上重复渲染文本在某种程度上是“附加的”.我意识到设置Canvas.Brush.Style:=bsClear是导致问题的原因,但我确实需要透明地重复呈现文本(即在OnPaint事件中).执行此 *** 作后,文本看起来不太好.

我怎么能避免这种情况?

这是一些示例代码;如果你在名为btn1的Tbutton上点击几下,就可以看到效果.

procedure TForm1.btn1Click(Sender: TObject);beginForm1.Canvas.Brush.Style:=bsClear; //if you omit this,everything is OK.Form1.Canvas.Font.color:=clRed;Form1.Canvas.Font.name:='Times new Roman';Form1.Canvas.Font.Style:=[fsBold];Form1.Canvas.Font.Size:=12;Form1.Canvas.textout(50,50,'www.stackoverflow.com');end;
解决方法 这是因为GDI在绘制文本时应用了一些抗锯齿,使文本看起来更好.这会导致绘制文本外部的一些背景像素在文本附近被涂成红色/红色.下次绘制文本时,如果不清除背景,抗锯齿会使这些偏红的像素变得更红.

您可以将背景清除为Arioch ‘The中的Arioch ‘The,或者如果您确实需要透明地重复渲染文本,则可以关闭抗锯齿.

TOndrej在this answer中提供了一个很好的功能,用于指定文本输出质量.使用它,代码变为:

beginForm1.Canvas.Brush.Style:=bsClear;Form1.Canvas.Font.color:=clRed;Form1.Canvas.Font.name:='Times new Roman';Form1.Canvas.Font.Style:=[fsBold];Form1.Canvas.Font.Size:=12;SetFontQuality(Form1.Canvas.Font,NONANTIAliASED_QUAliTY);  // <--Form1.Canvas.textout(50,'www.stackoverflow.com');end;
总结

以上是内存溢出为你收集整理的delphi – TCanvas上的“附加”文本渲染?全部内容,希望文章能够帮你解决delphi – TCanvas上的“附加”文本渲染?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1268787.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存