• 0
estra

Как в FM нарисовать текст на Canvas под углом?

Вопросы

Как в FM нарисовать текст на Canvas под углом? (Вариант в вращением TLabel не предлагать, интересует как это сделать самому, с помощью Canvas.FillText)).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 ответ на этот вопрос

  • 0

В общем ничего кроме стандартных знаний линейной алгебры здесь не требуется. Согласно линейной алгебры нужно построить матрицу трансформации задать ее для канвы и рисовать все что угодно.

 

Если вспомнить, то выполнить нужно следующее:

  1. Сместить Систему Координат (СК) на вектор центра поворота.
  2. Повернуть СК на угол поворота
  3. Сместить СК на обратные вектор центра поворота.

В коде это будет выглядеть так:

uses
  System.Math.Vectors;

{$R *.fmx}

procedure TForm1.ButtonDrawRotatedTextClick(Sender: TObject);
var
  RotationMatrix: TMatrix;
  TranslationMatrix: TMatrix;
  ReverseTranslationMatrix: TMatrix;
begin
  Image1.Bitmap.SetSize(200, 200);
  Image1.Bitmap.Clear(TAlphaColorRec.Null);
  with Image1.Bitmap.Canvas do
  begin
    BeginScene;
    try
      TranslationMatrix := TMatrix.CreateTranslation(100, 100);
      RotationMatrix := TMatrix.CreateRotation(-Pi / 180 * nbAngle.Value);
      ReverseTranslationMatrix := TMatrix.CreateTranslation(-100, -100);
      SetMatrix(ReverseTranslationMatrix * RotationMatrix * TranslationMatrix);
      Fill.Color := TAlphaColorRec.Red;
      Fill.Kind := TBrushKind.Solid;
      Font.Size := 20;
      FillText(TRectF.Create(50, 50, 150, 150), 'Текст', False, 1, [], TTextAlign.Center, TTextAlign.Center);
    finally
      EndScene;
    end;
    Image1.Repaint;
  end;
end;

Результат:

post-1-0-96285600-1401307069.jpg

Проект: DrawRotatedTextDemo.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу