Как выглядят шрифты на канвасе - страница 3

 
Комбинатор:
ну вот это и используется

Легко же проверить:

#property script_show_inputs 
//#include <CText\CText.mqh>
#include <Canvas\Canvas.mqh>

input string Text="Пробный текст";           // Текст
input string Font_Name="Times New Roman";    // Шрифт
input color  FontColor=clrDarkOrchid;        // Цвет 
input double SizeFont=100;                // Размер шрифта

void OnStart()
  {
  // CText TEXT(Text,Font_Name,100,150,SizeFont,FontColor);

   CCanvas CANV;
   CANV.FontSet(Font_Name,(int)SizeFont,FW_NORMAL);
   if(!CANV.CreateBitmapLabel(0,0,"CanvasText",100,300,1300,200,COLOR_FORMAT_ARGB_NORMALIZE)) Print("Error creating canvas: ",GetLastError());
   for(double s=SizeFont;s>-2000;s-=1)
     {
      //TEXT.NewSize(s);
      CANV.FontSizeSet((int)s);
      CANV.Erase(0);
      CANV.TextOut(0,50,Text,ColorToARGB(FontColor));
      CANV.FontSizeSet(40);
      CANV.TextOut(0,0,"Размер шрифта = "+DoubleToString(s,3),ColorToARGB(clrBlue));
      CANV.Update();
      Sleep(30);
      if(IsStopped()) break;
     }
   CANV.Destroy();
  }
//+------------------------------------------------------------------+

Прекрасно видно, что никакой плавности и в помине нет.

Нет, только масштабирование растра, причем на уровне double. Иначе никак не добиться такой плавности.

 
Nikolai Semko:

Прекрасно видно, что никакой плавности и в помине нет.

у вас на гифке шаг 0.1 )
 
Комбинатор:
у вас на гифке шаг 0.1 )

Ну да. Шаг 0.1 для CText, т.к. он всасывает размер double. А шаг для CCanvas округляется до целого числа, т.к. он не понимает double.

При чем тут гифка. Запустите ex5 файл, который я сбрасывал и увидите без гифки.

 

думаю, вам нужна функция типа "ttf to bmp"

http://freetype.sourceforge.net/index2.html

 
Taras Slobodyanik:
думаю, вам нужна функция типа "ttf to bmp"
Она уже есть в классе CCanvas и называется TextOut. Ибо все, что нарисовано в канвасе это и есть bmp изображение. Только размер шрифта задаётся в ней целочисленным значением. Но класс CText (черный ящик) может задавать размер шрифта дробным числом. И я предположил, что делает это он посредством масштабирования растрового изображения ( оно же Bmp изображение или же графический ресурс), сформированный функцией TextOut.
 
Nikolai Semko:
Она уже есть в классе CCanvas и называется TextOut. Ибо все, что нарисовано в канвасе это и есть bmp изображение. Только размер шрифта задаётся в ней целочисленным значением. Но класс CText (черный ящик) может задавать размер шрифта дробным числом. И я предположил, что делает это он посредством масштабирования растрового изображения ( оно же Bmp изображение или же графический ресурс), сформированный функцией TextOut.

это я понял и знаю)

я вам предлагаю самостоятельно увеличивать/уменьшать/печатать текст, без TextOut

 
Taras Slobodyanik:

это я понял и знаю)

я вам предлагаю самостоятельно увеличивать/уменьшать шрифт без TextOut

Спасибо, добрый человек. ))

Даже вне mql программно это сделать мегасложно. В каждом языке есть свой "TextOut". И я абсолютно уверен, что MQ формирование растрового текста из векторного формата ttf осуществляет средствами Windows, а не создавали свой алгоритм.

Если заглянуть в Word, то там тоже нельзя установить шрифт дробного размера.
Но ведь в данном примере размер действительно имеет дробное значение. И если Вы зайдете в браузер на вашем телефоне там тоже вроде размер шрифта меняется плавно, а не дискретно.
Мой вывод - такое можно сделать только растровым масштабированием в сторону уменьшения. И впрочем, я понимаю, как это сделать. Это не сложно. Только вот вопрос - какая скорость будет. Конечно же будет потеря скорости, но на сколько значительная?

 
Nikolai Semko:

Мой вывод - такое можно сделать только растровым масштабированием в сторону уменьшения. И впрочем, я понимаю, как это сделать. Это не сложно. Только вот вопрос - какая скорость будет. Конечно же будет потеря скорости, но на сколько значительная?

Реализовал масштабирование растра. Скорость приятно удивила. При  большом шрифте ( более 50) скорость вывода отмасштабированного текста даже выше, чем выводит TextOut( в 2-3 раза). Но при шрифте  около 20 скорость где-то в полтора раза медленнее.