ResourceReadImage

Lit les données de la ressource graphique, créé par la fonction ResourceCreate() ou sauvegardée dans le fichier EX5 à la compilation.

bool  ResourceReadImage(
   const string      resource_name,       // le nom de la ressource graphique pour la lecture
   uint&             data[],              // le tableau des données de la ressource
   uint&             width,               // la largeur de l'image dans la ressource
   uint&             height,              // la hauteur de l'image dans la ressource
   );

Paramètres

resource_name

[in]  Le nom de la ressource graphique contenant l'image. Pour l'accès aux ressources personnelles, il faut indiquer "::resourcename". S'il est nécessaire de charger la ressource du fichier EX5 compilé, il faut mettre le nom complet avec le chemin relativement au dossier MQL5, le nom du fichier et le nom de la ressource, par exemple "path\\filename.ex5::resourcename".

data[][]

[in]  Un tableau à 1 ou 2 dimensions pour obtenir la ressource graphique.

img_width

[out]  La largeur de l'image de la ressource graphique en pixels.

img_height

[out]  La hateur de l'image de la ressource graphique en pixels.

Valeur de Retour

true — en cas de succès, false sinon. Pour en savoir plus sur l'erreur, il faut appeler la fonction GetLastError().

Note

Si à la base du tableaudata[] il est nécessairede créer après la ressource graphique, il faut utiliser le format de la couleur COLOR_FORMAT_ARGB_NORMALIZE ou COLOR_FORMAT_XRGB_NOALPHA.

Si le tableaudata[] est bidimensionnel et que sa deuxième dimension est inférieure à la taille X( width) de la ressource graphique, la fonction ResourceReadImage() retournera false et la lecture ne sera pas faite. Mais si la ressource existe, les tailles actuelles de l'image reviennent aux paramètres width et height. Cela permettra de faire encore une autre tentative pour lire la ressource.

Exemple :

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- déclare les paramètres de la ressource graphique
   string rc_name="Resource";
   uint   rc_width=100;
   uint   rc_height=100;
   uint   rc_data[];
   uint   rc_size=rc_width*rc_height;
 
   ResetLastError();
//--- définit la taille du tableau de pixels
   if(ArrayResize(rc_data,rc_size)!=rc_size)
     {
      Print("ArrayResize() failed. Error code: ",GetLastError());
      return;
     }
//--- remplit le tableau de pixels avec une couleur transparente et crée une ressource graphique basée sur celle-ci
   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());
 
//--- vérifie la ressource graphique créée.
//--- récupère l'heure et le prix de la barre actuelle
   MqlTick tick={};
   if(!SymbolInfoTick(Symbol(),tick))
     {
      Print("SymbolInfoTick() failed. Error code: ",GetLastError());
      return;
     }
//--- crée l'objet Bitmap en utilisant les coordonnées du dernier prix et de l'heure du tick
   string obj_name="Bitmap";
   if(!ObjectCreate(0,obj_name,OBJ_BITMAP,0,tick.time,tick.bid))
     {
      Print("ObjectCreate() failed. Error code: ",GetLastError());
      return;
     }
//--- définit la largeur et la hauteur de l'objet bitmap créé égales à la largeur et à la hauteur de la ressource graphique.
//--- définit le point d'ancrage de l'objet en son centre.
   ObjectSetInteger(0,obj_name,OBJPROP_XSIZE,rc_width);
   ObjectSetInteger(0,obj_name,OBJPROP_YSIZE,rc_height);
   ObjectSetInteger(0,obj_name,OBJPROP_ANCHOR,ANCHOR_CENTER);
//--- spécifie la ressource graphique créée précédemment pour l'objet bitmap en tant que fichier image
//--- Dans ce cas, afin d'indiquer le nom de la ressource graphique utilisée, il faut ajouter "::" avant son nom
   ObjectSetString(0,obj_name,OBJPROP_BMPFILE,"::"+rc_name);
   
//--- définit la couleur DodgerBlue avec une transparence de 200
   uint clr=ColorToARGB(clrDodgerBlue,200);
//--- remplit tout le tableau de pixels de la ressource graphique avec la couleur définie
   ArrayInitialize(rc_data,clr);
//--- met à jour les données de la ressource graphique
   Update(rc_name,rc_data,rc_width,rc_height,true);
   
//--- attente de 3 secondes avant de lire les données de la ressource graphique
   Print("Wait 3 seconds before ResourceReadImage()");
   Sleep(3000);
//--- lit l'image de la ressource dans un nouveau tableau de pixels
   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;
     }
 
//--- définit la couleur OrangeRed avec une transparence de 200
   clr=ColorToARGB(clrOrangeRed,200);
//--- remplit tout le tableau de pixels de la ressource graphique avec la couleur définie et crée une nouvelle ressource graphique basée sur celle-ci
   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());
   
//--- créer l'objet "Étiquette graphique" en utilisant les coordonnées du prix et de l'heure du dernier tick
   string obj_name2="BitmapLabel";
   if(!ObjectCreate(0,obj_name2,OBJ_BITMAP_LABEL,0,0,0))
     {
      Print("ObjectCreate() failed. Error code: ",GetLastError());
      return;
     }
//--- récupère les coordonnées de l'écran en utilisant le prix et l'heure précédemment reçus
   int x=0,y=0;
   if(!ChartTimePriceToXY(0,0,tick.time,tick.bid,x,y))
     {
      Print("New ChartTimePriceToXY() failed. Error code: ",GetLastError());
      return;
     }
//--- définit la largeur et la hauteur de l'objet d'étiquette graphique créé égales à la largeur et à la hauteur de la ressource graphique.
//--- définit le point d'ancrage de l'objet en son centre.
   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);
//--- définit la ressource graphique copiée en tant que fichier image pour l'objet d'étiquette graphique
//--- dans ce cas, afin d'indiquer le nom de la ressource graphique utilisée, il faut ajouter "::" avant son nom
   ObjectSetString(0,obj_name2,OBJPROP_BMPFILE,"::"+rc_name+"Copy");
   
//--- change la couleur du nouvel objet étiquette graphique
   Print("Wait 3 seconds before changing color to GreenYellow");
   Sleep(3000);
//--- définit la couleur GreenYellow avec une transparence de 200
   clr=ColorToARGB(clrGreenYellow,200);
//--- remplit tout le tableau de pixels de la nouvelle ressource graphique avec la couleur définie
   ArrayInitialize(rc_data_copy,clr);
//--- met à jour les données de la ressource graphique
   Update(rc_name+"Copy",rc_data_copy,rc_width,rc_height,true);
   
//--- attente de trois secondes et suppression des ressources et des deux objets
   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);
  }
//+------------------------------------------------------------------+
//| Met à jour les données des ressources graphiques                 |
//+------------------------------------------------------------------+
void Update(const string res_name,const uint &pixel_data[],const uint width,const uint height,const bool redraw)
  {
//--- laisser si aucune dimension n'est passée
   if(width==0 || height==0)
      return;
//--- met à jour les données des ressources et redessine le graphique
   if(ResourceCreate(res_name,pixel_data,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE) && redraw)
      ChartRedraw();
  }

Voir aussi

Ressources, ObjectCreate(), ObjectSetString(), OBJPROP_BMPFILE