Grafica in MetaTrader 5: Canvas - disegnare all'interno del buffer con lo snap ad oggetto

 

La nuova funzione ResourceCreate è apparsa nella build 619 per la creazione di risorse grafiche dinamiche al volo.

Con questa funzione, ora puoi creare immagini complesse a colori a 32 bit (incluso il canale alfa) e allegarle agli oggetti del grafico.

In che modo gli sviluppatori possono trarne vantaggio:

  • i programmi possono creare rapidamente bellissime interfacce senza la necessità di trasportare molti file

  • file di risorse aggiuntive (non solo BMP e WAV) possono essere aggiunti direttamente ai file EX5 utilizzando la direttiva # Resource "file name", letti in fase di runtime, modificati e applicati agli oggetti

    La funzione ResourceLoad() sarà disponibile nella build più vicina. Permetterà di leggere le risorse che erano state allegate al file EX5 qualche tempo prima

  • è possibile applicare qualsiasi costruzione analitica su un grafico gestendo la trasparenza con l'uso di canali alfa

    ad esempio possiamo disegnare una nuvola semitrasparente con la previsione di possibili direzioni di mercato gestendo colore e saturazione

  • disegnare qualsiasi cosa su un grafico

Presto aggiungeremo la classe CCanvas alla libreria standard. Questa classe consentirà di manipolare facilmente le immagini disegnandole nel proprio buffer con l'output su un oggetto associato.

Ecco un semplice script che mostra il funzionamento di questa classe (i file sono allegati):

#include "Canvas.mqh"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   CCanvas can;
//---
   can.Create("MySpace",0,0,512,512,COLOR_FORMAT_ARGB_RAW);
   MathSrand(0);
//---
   for(int i=0;i<10000;i++)
     {
      can.FillRect(MathRand()&255,MathRand()&255,256+(MathRand()&255),256+(MathRand()&255),XRGB(MathRand(),MathRand(),MathRand()));
      can.Circle(MathRand()&511,MathRand()&511,MathRand()&127,XRGB(MathRand(),MathRand(),MathRand()));
      can.Triangle(MathRand()&511,MathRand()&511,MathRand()&511,MathRand()&511,MathRand()&511,MathRand()&511,XRGB(MathRand(),MathRand(),MathRand()));
      //---
      can.Update();
     }
//---
  }