Delphi 6:如何通过TextOut()方法显示大尺寸高质量文本?
发布时间:2020-12-15 09:35:50 所属栏目:大数据 来源:网络整理
导读:我有一个T Image组件,我使用TCanvas.TextOut()打印文本字符串.我将TImage的高度和宽度设置为50像素X(TextWidth)像素的大尺寸,并将Canvas字体高度设置为略小于48像素的高度.然后我将BitBlt()TImage的位图放到主Canvas上.我在屏幕上看到的是那些非常粗糙的大字
我有一个T
Image组件,我使用TCanvas.TextOut()打印文本字符串.我将TImage的高度和宽度设置为50像素X(TextWidth)像素的大尺寸,并将Canvas字体高度设置为略小于48像素的高度.然后我将BitBlt()TImage的位图放到主Canvas上.我在屏幕上看到的是那些非常粗糙的大字母.我想要的是厚厚的巨型字母,看起来很光滑.使用TImage / BitBlt组合的原因是因为我需要动态地调整文本的大小和alpha混合.
对我来说,最简单的方法是将大光滑的字母打印到我的TImage位图上? 解决方法
你永远不会展示TImage吗?那你应该真的使用屏幕外的位图.这是实现双缓冲(无闪烁渲染)的非常常见的技术.
例如, var bm: TBitmap; procedure InitOffscreenBitmap; begin bm := TBitmap.Create; bm.SetSize(bmWidth,bmHeight); end; procedure DrawBitmap; begin // Draw on bm end; procedure Swap; begin BitBlt(Canvas.Handle,X,Y,bmWidth,bmHeight,bm.Canvas.Handle,SRCCOPY) end; 如果您使用的是现代版本的Windows(例如Vista)或启用了ClearType的Windows XP(出于某些非常奇怪的原因,默认情况下禁用它),则文本应该是平滑的.只需确保使用现代字体.他们中的大多数都会这样做,但是使用ClearType无法平滑MS Sans Serif这样的旧字体. 此外,当然,bm必须与表单具有相同的背景颜色,因为在bm上绘制文本时会发生alpha混合.因此,如果表单是clRed(出于某些不正当的原因),您需要这样做 bm.Canvas.Brush.Color := clRed; bm.Canvas.Brush.Style := bsSolid; bm.FillRect(Rect(0,bmHeight)); 之前 bm.TextOut(...) 我们正在谈论同样的事情:这不是很顺利吗? procedure TForm3.FormPaint(Sender: TObject); begin Canvas.Font.Name := 'Segoe UI'; Canvas.Font.Height := 64; Canvas.TextOut(10,10,'This is an example.'); end; Sample Text Output http://privat.rejbrand.se/sampletext.png(High-Res) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |