加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读