ResourceReadImage

La funzione legge i dati dalla risorsa grafica creata dalla funzione ResourceCreate() o salvato in un file EX5 durante la compilazione.

bool  ResourceReadImage(
   const string      resource_name,       // nome risorsa grafica per la lettura
   uint&             data[],              // array di ricezione dati dalla risorsa
   uint&             width,               // per ricevere la larghezza dell'immagine nella risorsa
   uint&             height,              // per ricevere l'altezza immagine nella risorsa
   );

Parametri

resource_name

[in] Nome della risorsa grafica contenente un'immagine. Per accedere alle proprie risorse, il nome viene usato in forma breve "::resourcename". Se scarichiamo una risorsa da un file EX5 compilato, il nome completo dovrebbe essere usato con il percorso relativo a directory mql5, nome file e risorse - "percorso\\nomefile.ex5::resourcename".

data[][]

[in] array mono o bidimensionale per la ricezione di dati dalla risorsa grafica.

img_width

[out] Larghezza immagine della risorsa grafica, in pixel.

img_height

[out] Altezza immagine della risorsa grafica, in pixel.

Valore restituito

true se ha successo, altrimenti false. Per ottenere informazioni sull'errore, chiamare la funzione GetLastError().

Nota

Se l'array data[] viene quindi utilizzato per la creazione di una risorsa grafica, COLOR_FORMAT_ARGB_NORMALIZE or COLOR_FORMAT_XRGB_NOALPHAdevono essere usati per i formati colore.

Se l'array data[] è bi-dimensionale e la sua seconda dimensione è minore della grandezza X(larghezza) della risorsa grafica, la funzione ResourceReadImage() restituice falso e la lettura non viene eseguita. Ma se la risorsa esiste, l'attuale grandezza dell'immagine viene restituita ai parametri di larghezza ed altezza. Ciò consentirà di effettuare un altro tentativo di ricezione dei dati dalla risorsa.

Esempio:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- dichiarare i parametri della risorsa grafica
   string rc_name="Resource";
   uint   rc_width=100;
   uint   rc_height=100;
   uint   rc_data[];
   uint   rc_size=rc_width*rc_height;
 
   ResetLastError();
//-- impostare la dimensione dell'array dei pixel
   if(ArrayResize(rc_data,rc_size)!=rc_size)
     {
      Print("ArrayResize() failed. Error code: ",GetLastError());
      return;
     }
//--- riempire l'array di pixel con un colore trasparente e creare una risorsa grafica basata su di esso
   ArrayInitialize(rc_data,0x00FFFFFF);
   if(!ResourceCreate(rc_name,rc_data,rc_width,rc_height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE))
     {
      Print("ResourceCreate() failed. Error code: ",GetLastError());
      return;
     }
   Print("Size of created recource array: ",rc_data.Size());
 
//--- controlla la risorsa grafica creata.
//-- ottenere i dati di tempo e prezzo della barra corrente
   MqlTick tick={};
   if(!SymbolInfoTick(Symbol(),tick))
     {
      Print("SymbolInfoTick() failed. Error code: ",GetLastError());
      return;
     }
//--- creare l'oggetto Bitmap utilizzando le coordinate del prezzo e del tempo dell'ultimo tick
   string obj_name="Bitmap";
   if(!ObjectCreate(0,obj_name,OBJ_BITMAP,0,tick.time,tick.bid))
     {
      Print("ObjectCreate() failed. Error code: ",GetLastError());
      return;
     }
//--- impostare la larghezza e l'altezza dell'oggetto bitmap creato uguale alla larghezza e all'altezza della risorsa grafica.
//--- impostare il punto di ancoraggio dell'oggetto al suo centro.
   ObjectSetInteger(0,obj_name,OBJPROP_XSIZE,rc_width);
   ObjectSetInteger(0,obj_name,OBJPROP_YSIZE,rc_height);
   ObjectSetInteger(0,obj_name,OBJPROP_ANCHOR,ANCHOR_CENTER);
//--- specificare la risorsa grafica precedentemente creata per l'oggetto bitmap come file immagine
//--- in questo caso, per indicare il nome della risorsa grafica usata, dobbiamo aggiungere "::" prima del suo nome
   ObjectSetString(0,obj_name,OBJPROP_BMPFILE,"::"+rc_name);
   
//-- impostare il colore DodgerBlue con la trasparenza di 200
   uint clr=ColorToARGB(clrDodgerBlue,200);
//-- riempie l'intero array di pixel della risorsa grafica con il colore impostato
   ArrayInitialize(rc_data,clr);
//--- aggiornare i dati delle risorse grafiche
   Update(rc_name,rc_data,rc_width,rc_height,true);
   
//--- attendere 3 secondi prima di leggere i dati della risorsa grafica
   Print("Wait 3 seconds before ResourceReadImage()");
   Sleep(3000);
//--- legge l'immagine dalla risorsa in un nuovo array di pixel
   uint rc_data_copy[];
   uint w=0,h=0;
   ResetLastError();
   if(!ResourceReadImage("::"+rc_name,rc_data_copy,w,h))
     {
      Print("ResourceReadImage() failed. Error code: ",GetLastError());
      return;
     }
 
//-- impostare il colore OrangeRed con la trasparenza di 200
   clr=ColorToARGB(clrOrangeRed,200);
//--- riempie l'intero array di pixel della risorsa grafica con il colore impostato e creare una nuova risorsa grafica basata su di essa
   ArrayInitialize(rc_data_copy,clr);
   if(!ResourceCreate(rc_name+"Copy",rc_data_copy,rc_width,rc_height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE))
     {
      Print("New ResourceCreate() failed. Error code: ",GetLastError());
      return;
     }
   Print("Size of created new recource array: ",rc_data_copy.Size());
   
//--- creare l'oggetto "Etichetta grafica" usando le coordinate del prezzo e del tempo dell'ultimo tick
   string obj_name2="BitmapLabel";
   if(!ObjectCreate(0,obj_name2,OBJ_BITMAP_LABEL,0,0,0))
     {
      Print("ObjectCreate() failed. Error code: ",GetLastError());
      return;
     }
//-- ottenere le coordinate dello schermo utilizzando il prezzo e l'ora ricevuti in precedenza
   int x=0,y=0;
   if(!ChartTimePriceToXY(0,0,tick.time,tick.bid,x,y))
     {
      Print("New ChartTimePriceToXY() failed. Error code: ",GetLastError());
      return;
     }
//--- impostare la larghezza e l'altezza dell'oggetto grafico creato uguale alla larghezza e all'altezza della risorsa grafica.
//--- impostare il punto di ancoraggio dell'oggetto al suo centro.
   ObjectSetInteger(0,obj_name2,OBJPROP_XSIZE,rc_width);
   ObjectSetInteger(0,obj_name2,OBJPROP_YSIZE,rc_height);
   ObjectSetInteger(0,obj_name2,OBJPROP_ANCHOR,ANCHOR_LEFT_UPPER);
   ObjectSetInteger(0,obj_name2,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,obj_name2,OBJPROP_YDISTANCE,y);
//--- impostare la risorsa grafica copiata come file immagine per l'oggetto grafico
//--- in questo caso, per indicare il nome della risorsa grafica usata, dobbiamo aggiungere "::" prima del suo nome
   ObjectSetString(0,obj_name2,OBJPROP_BMPFILE,"::"+rc_name+"Copy");
   
//--- cambiare il colore del nuovo oggetto grafico
   Print("Wait 3 seconds before changing color to GreenYellow");
   Sleep(3000);
//-- impostare il colore GreenYellow con la trasparenza di 200
   clr=ColorToARGB(clrGreenYellow,200);
//-- riempie l'intero array di pixel della nuova risorsa grafica con il colore impostato
   ArrayInitialize(rc_data_copy,clr);
//--- aggiornare i dati delle risorse grafiche
   Update(rc_name+"Copy",rc_data_copy,rc_width,rc_height,true);
   
//--- attendere tre secondi ed eliminare le risorse ed entrambi gli oggetti
   Print("Wait 3 seconds before deleting both objects");
   Sleep(3000);
   Print("Deleting Resource and all Bitmap objects");
   ResourceFree("::"+rc_name);
   ResourceFree("::"+rc_name+"Copy");
   ObjectDelete(0,obj_name);
   ObjectDelete(0,obj_name2);
  }
//+------------------------------------------------------------------+
//| Aggiornamento dei dati delle risorse grafiche                    |
//+------------------------------------------------------------------+
void Update(const string res_name,const uint &pixel_data[],const uint width,const uint height,const bool redraw)
  {
//-- uscire se vengono passate dimensioni zero
   if(width==0 || height==0)
      return;
//-- aggiornare i dati delle risorse e ridisegnare il grafico
   if(ResourceCreate(res_name,pixel_data,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE) && redraw)
      ChartRedraw();
  }

Vedi anche

Resource, ObjectCreate(), ObjectSetString(), OBJPROP_BMPFILE