Jump to content

[TfgCanvas] Невозможность отрисовки мультистрочного текста


Recommended Posts

В продолжение темы.

Пишу текст на фото. Но не срабатывает перенос строки. Что-то не так делаю?

  var Bitmap := TfgBitmap.Create;
  Bitmap.LoadFromFile(filename);
  Bitmap.Canvas.BeginPaint;
  try
    Bitmap.Canvas.Font.Size:= 50;
    Bitmap.Canvas.Fill.Color := TAlphaColorRec.Red;
    Bitmap.Canvas.Fill.Kind := TfgBrushKind.Solid;
    Bitmap.Canvas.FillText(Bitmap.Bounds, DateTimeToStr(now) + sLineBreak + DateTimeToStr(now) + sLineBreak + DateTimeToStr(now) ,True, TfgHorizontalAlignment.Right, TfgVerticalAlignment.Bottom);
  finally
    Bitmap.SaveToFile(filename);
    Bitmap.Canvas.EndPaint;
  end;
  FreeAndNil(Bitmap);

Успешный сценарий который ожидаю. Дата в трех строчках

Link to post
Share on other sites
  • Administrators

Здравствуйте.

Подтверждаю проблему.

Постараемся исправить в ближайшее время.

PS строки Bitmap.Canvas.EndPaint; и Bitmap.SaveToFile(filename); надо как минимум поменять местами

PPS try finally поставить между конструктором и деструктором для надежности.

Link to post
Share on other sites
1 минуту назад, Viktor Akselrod сказал:

Здравствуйте.

Подтверждаю проблему.

Постараемся исправить в ближайшее время.

PS строки Bitmap.Canvas.EndPaint; и Bitmap.SaveToFile(filename); надо как минимум поменять местами

PPS try finally поставить между конструктором и деструктором для надежности.

Благодарю. Поправим у себя с учетом рекомендаций

Link to post
Share on other sites
  • Similar Content

    • By Артем
      Всем привет! Позвольте и эту тему апнуть
      Не могу поверх фото текст наложить. Пробую так.
      Как это необходимо делать верно?
       
      AResult.Bitmap - приходит из CameraCapturePhotoReady(Sender: TObject;  const AResult: TfgCameraCaptureResult);
        filename := filename + strDate + '.png';
        var B := AResult.Bitmap;
      //  B.Canvas.BeginPaint;
        B.Canvas.Font.Size:= 50;
        B.Canvas.Fill.Color := TAlphaColorRec.Red;
        B.Canvas.Fill.Kind := TfgBrushKind.Solid;
      //  var mRect :=B.LogicalBounds;
      //  mRect.Width := mRect.Width - mRect.Width * 0.05;
      //  mRect.Height := mRect.Height - mRect.Height * 0.05;
        B.Canvas.FillText(B.Bounds, DateTimeToStr(now) ,False, TfgHorizontalAlignment.Right, TfgVerticalAlignment.Bottom);
        B.SaveToFile(filename);
      //  B.Canvas.EndPaint;
        TfgAssetsManager.Current.AddBitmap('asset_' + mainf.md5(filename), B);
    • By sinuke
      Название приложения: sinTest
      Платформа: Android 32 bit, Android 64 bit, Windows
      Поддерживаемые версии ОС: Android 6.0 и новее, Windows 7 SP1 и новее
      Необходимое свободное место: до 40 Мб
      Описание: Программный комплекс sinTest предназначен для проведения тестов с использованием QR-кодов. Windows-редактор позволяет составлять и редактировать существующие тесты, загружать их на сервер, просматривать результаты выполнения. При загрузке теста на сервер генерируется QR-код, который при сканировании в мобильном приложении позволяет загрузить и выполнить соответствующий тест.
      Ссылка на приложение: Play Market
      Ссылка на Windows-редактор: sinTest
      Скриншоты (Android):

      Скриншоты (Windows):

      Тестовый файл (необходимо распаковать): test.zip
    • By Stas
      Здравствуйте, обнаружил неприятную особенность отрисовки текста.
      Охватило меня желание нарисовать текст в круге.
      procedure TFormMain.fgButton1Tap(Sender: TObject); var B:TfgBitmap; Sz:Integer; begin B:=TfgBitmap.Create; Sz:=128; B.Size:=Tsize.Create(Sz,Sz); B.Canvas.Fill.Color:=TAlphaColorRec.Green; B.Canvas.FillCircle(B.Size.cx/2,B.Size.cy/2,B.Size.cx/2); B.Canvas.Font.Size:=Sz/2; B.Canvas.Fill.Color := TAlphaColorRec.Red; B.Canvas.Fill.Kind := TfgBrushKind.Solid; B.Canvas.FillText(B.Bounds,'100',False); TfgAssetsManager.Current.AddBitmap('test',B); fgImage1.ImageName:='test'; end; И показать его на картинке.
      И не получилось
      Спасибо

    • By s.fedotenko@gmail.com
      xx_1 := 0; yy_1 := 0; xx := 0; i := 0; APoints:=nil; while xx < pCanvas.Width do begin xx := i * (1 / 100); yy := (pCanvas.Height / 2) - 100 * sin(2 * pi * 0.05 * i / 100); pCanvas.DrawLine(pointf(xx_1, yy_1), pointf(xx, yy)); SetLength(APoints, Length(APoints) + 1); APoints[Length(APoints) - 1] := pointf(xx, yy - 50); xx_1 := xx; yy_1 := yy; inc(i); end; if Length(APoints) > 0 then pCanvas.DrawLines(APoints); рисуется функция двумя способами:
      через DrawLine - нормально
      через DrawLines -нет
      Project_TestBM.zip
    • By s.fedotenko@gmail.com
      Здравствуйте.
      Имеем код:
      procedure TFormMain.fgPaintBox1Paint(Sender: TObject; const ACanvas: TfgCanvas); var aBm: TFgBitMap; begin try aBm := TFgBitMap.Create; aBm.Size := Tsize.Create(round(fgPaintBox1.Width), round(fgPaintBox1.Height)); aBm.Canvas.FillColor(TAlphaColorRec.Gray); aBm.Canvas.Stroke.Kind := TfgBrushKind.Solid; aBm.Canvas.Stroke.Color := TAlphaColorRec.Red; aBm.Canvas.Fill.Kind := TfgBrushKind.Solid; aBm.Canvas.Fill.Color := TAlphaColorRec.Yellow; aBm.Canvas.DrawCircle(aBm.Width / 2, aBm.Height / 2, aBm.Width / 2); ACanvas.DrawBitmap(aBm, 0, 0); finally aBm.DisposeOf; aBm := nil; end; end; Скэйл устройства =2.
      получили результат:

      Два вопроса:
      1. на PaintBox битмап выводится с размерами в 2 раза меньше. Насколько я понял это связано со скэйлом устройства, и что бы битмап отобразился на весь PaintBox на экране, нужно задавать физические размеры битмапа в 2 раза (для данного устройства) больше. Где можно узнать скэйл устройства, что бы задать размеры битмапа соответствующие выводу на PaintBox? 
      2. Не очень понятно, почему примитивы на битмапе рисуются со скэйлом устройства?  
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...