delphi – TCanvas上的“附加”文本渲染?
发布时间:2020-12-15 09:38:31 所属栏目:大数据 来源:网络整理
导读:令我惊讶的是,我发现在TCanvas上重复渲染文本在某种程度上是“附加的”.我意识到设置Canvas.Brush.Style:=bsClear是导致问题的原因,但我确实需要透明地重复呈现文本(即在OnPaint事件中).执行此操作后,文本看起来不太好. 我怎么能避免这种情况? 这是一些示例
令我惊讶的是,我发现在TCanvas上重复渲染文本在某种程度上是“附加的”.我意识到设置Canvas.Brush.Style:=bsClear是导致问题的原因,但我确实需要透明地重复呈现文本(即在OnPaint事件中).执行此操作后,文本看起来不太好.
我怎么能避免这种情况? 这是一些示例代码;如果你在名为btn1的TButton上点击几下,就可以看到效果. procedure TForm1.btn1Click(Sender: TObject); begin Form1.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中提供了一个很好的功能,用于指定文本输出质量.使用它,代码变为: begin Form1.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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容