You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Skia4Delphi的TSKPaintBox实现45°文本旋转?

在Skia4Delphi的TSKPaintBox中实现45°文本旋转

要在TSKPaintBox中实现文本旋转,核心是利用Skia画布的变换操作(平移+旋转),配合状态保存/恢复来避免影响其他绘制内容。以下是具体实现步骤和代码示例:

核心思路

  1. 保存当前画布状态,防止后续操作破坏原有绘制环境
  2. 将画布原点平移到旋转中心(可以是画布中心或文本自身中心)
  3. 执行45°旋转(Skia使用弧度,需将角度转换为弧度)
  4. 绘制文本
  5. 恢复画布初始状态

代码示例(画布中心旋转)

在TSKPaintBox的OnPaint事件中编写如下代码:

procedure TForm1.SKPaintBox1Paint(Sender: TObject; const Canvas: ISKCanvas;
  const ARect: TRectF);
var
  LText: string;
  LCenterPoint: TPointF;
begin
  LText := '45°旋转示例文本';

  // 保存画布当前状态
  Canvas.Save();
  try
    // 计算画布中心作为旋转原点
    LCenterPoint := PointF(ARect.Width / 2, ARect.Height / 2);
    // 将画布原点平移到旋转中心
    Canvas.Translate(LCenterPoint.X, LCenterPoint.Y);
    // 旋转45°(Radians函数将角度转为Skia所需的弧度)
    Canvas.Rotate(Radians(45));
    // 以旋转中心为原点,居中绘制文本
    Canvas.DrawText(LText, PointF(0, 0), TSKTextAlign.Center);
  finally
    // 恢复画布初始状态
    Canvas.Restore();
  end;
end;

文本自身中心旋转(可选)

如果需要让文本围绕自身中心旋转(而非画布中心),可以先计算文本的边界,再调整平移和绘制坐标:

procedure TForm1.SKPaintBox1Paint(Sender: TObject; const Canvas: ISKCanvas;
  const ARect: TRectF);
var
  LText: string;
  LTextBounds: TRectF;
  LTextCenter: TPointF;
begin
  LText := '围绕自身旋转的文本';
  // 先计算文本的边界范围
  LTextBounds := Canvas.MeasureText(LText, ARect.TopLeft);
  // 计算文本自身的中心坐标
  LTextCenter := PointF(LTextBounds.Left + LTextBounds.Width/2, 
                       LTextBounds.Top + LTextBounds.Height/2);

  Canvas.Save();
  try
    // 平移画布原点到文本中心
    Canvas.Translate(LTextCenter.X, LTextCenter.Y);
    // 旋转45°
    Canvas.Rotate(Radians(45));
    // 绘制文本时,坐标偏移文本自身的半宽高,确保文本中心与旋转原点重合
    Canvas.DrawText(LText, PointF(-LTextBounds.Width/2, -LTextBounds.Height/2));
  finally
    Canvas.Restore();
  end;
end;

关键注意点

  • 状态保存/恢复:Canvas.Save()和Canvas.Restore()必须配对使用,否则会导致后续绘制的坐标系统混乱
  • 弧度转换:Skia的旋转方法仅接受弧度参数,使用Delphi内置的Radians()函数可以方便地将角度转为弧度
  • 平移的作用:旋转操作默认围绕画布原点(0,0)进行,通过平移将原点移到目标旋转中心,才能让文本围绕指定点旋转

内容的提问来源于stack exchange,提问作者Roberto Colpani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:17:13