ResourceReadImage

Liest Daten einer Grafik-Ressource, die von der Funktion ResourceCreate() erstellt war oder in EX5-Datei beim Kompilieren gespeichert war.

bool  ResourceReadImage(
   const string      resource_name,       // Name der Grafik-Ressource zum Lesen
   uint&             data[],              // Array, um die Daten aus der Ressource zu erhalten
   uint&             width,               // Um die Breite des Bildes in der Ressource zu erhalten
   uint&             height,              // Um die Bildhöhe in der Ressource zu erhalten
   );

Optionen

resource_name

[in] Name der grafischen Ressource, die das Bild enthält. Um auf die eigenen Ressourcen zuzugreifen, wird der Name in der Kurzform von "::resourcename" angegeben. Wenn Sie die Ressource aus der kompilierten EX5-Datei laden müssen, muss der volle Name mit dem relativen Pfad zu dem Ordner MQL5, den Dateinamen und Ressource-Name sein - "path\\filename.ex5::resourcename".

data[][]

[in] Ein eindimensionales oder zweidimensionales Array in dem die Daten eines graphischen Ressource erhalten werden.

img_width

[out]  Bildbreite der Ressource in Pixels.

img_height

[out]  Bildhöhe der Ressource in Pixels.

Rückgabewert

true – wenn erfolgreich, andernfalls false. Um Informationen über den Fehler zu erhalten, rufen Sie GetLastError() an.

Hinweis

Wenn das Array data[] dann für die Erstellung einer eine Grafik-Ressource verwendet werden soll, sollten die Farbe Format COLOR_FORMAT_ARGB_NORMALIZE oder COLOR_FORMAT_XRGB_NOALPHA verwendet werden.

Wenn das Array data[] zweidimensional ist, und die zweite Dimension kleiner ist als X (width) der grafischen Ressource, gibt die Funktion ResourceReadImage() false zurück und das Lesen wird nicht vorgenommen. Ist die Ressource jedoch vorhanden, wird die tatsächliche Bildgröße in den Parametern width und height zurückgegeben. Dadurch kann ein weiterer Versuch unternommen werden, Daten von der Ressource zu erhalten.

Beispiel:

//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- Deklaration der Parameter der grafischen Ressource
   string rc_name="Resource";
   uint   rc_width=100;
   uint   rc_height=100;
   uint   rc_data[];
   uint   rc_size=rc_width*rc_height;
 
   ResetLastError();
//--- Festlegen der Größe des Pixelarrays
   if(ArrayResize(rc_data,rc_size)!=rc_size)
     {
      Print("ArrayResize() failed. Error code: ",GetLastError());
      return;
     }
//--- Füllen des Pixelarrays mit einer transparenten Farbe und Erstellen einer grafischen Ressource auf der Grundlage dieser Farbe
   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());
 
//--- Überprüfung der erstellten grafischen Ressource.
//--- Ermitteln der Zeit- und Preisdaten des aktuellen Balkens
   MqlTick tick={};
   if(!SymbolInfoTick(Symbol(),tick))
     {
      Print("SymbolInfoTick() failed. Error code: ",GetLastError());
      return;
     }
//--- Erstellen des Bitmap-Objekts unter Verwendung der Koordinaten des letzten Tickpreises und der Zeit
   string obj_name="Bitmap";
   if(!ObjectCreate(0,obj_name,OBJ_BITMAP,0,tick.time,tick.bid))
     {
      Print("ObjectCreate() failed. Error code: ",GetLastError());
      return;
     }
//--- die Breite und Höhe des erstellten Bitmap-Objekts auf die Breite und Höhe der grafischen Ressource einstellen.
//--- Setzen des Ankerpunkts des Objekts auf seine Mitte.
   ObjectSetInteger(0,obj_name,OBJPROP_XSIZE,rc_width);
   ObjectSetInteger(0,obj_name,OBJPROP_YSIZE,rc_height);
   ObjectSetInteger(0,obj_name,OBJPROP_ANCHOR,ANCHOR_CENTER);
//--- Angabe der zuvor erstellten grafischen Ressource für das Bitmap-Objekt als Bilddatei
//--- In diesem Fall müssen wir, um den Namen der verwendeten grafischen Ressource anzugeben, "::" vor ihrem Namen hinzufügen
   ObjectSetString(0,obj_name,OBJPROP_BMPFILE,"::"+rc_name);
   
//--- Einstellen der Farbe DodgerBlue mit einer Transparenz von 200
   uint clr=ColorToARGB(clrDodgerBlue,200);
//--- Füllen des gesamten Pixelarrays der grafischen Ressource mit der eingestellten Farbe
   ArrayInitialize(rc_data,clr);
//--- Aktualisierung der grafischen Ressourcendaten
   Update(rc_name,rc_data,rc_width,rc_height,true);
   
//--- 3 Sekunden warten, bevor die grafischen Ressourcendaten gelesen werden
   Print("Wait 3 seconds before ResourceReadImage()");
   Sleep(3000);
//--- das Bild aus der Ressource in ein neues Array von Pixeln einlesen
   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;
     }
 
//--- Einstellen der Farbe OrangeRed mit einer Transparenz von 200
   clr=ColorToARGB(clrOrangeRed,200);
//--- Füllen der gesamten Pixelmatrix der grafischen Ressource mit der eingestellten Farbe und Erstellen einer neuen grafischen Ressource auf der Grundlage dieser Farbe
   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());
   
//--- Erstellen des Objekts "Graphical label" unter Verwendung der Koordinaten des letzten Tickpreises und der Zeit
   string obj_name2="BitmapLabel";
   if(!ObjectCreate(0,obj_name2,OBJ_BITMAP_LABEL,0,0,0))
     {
      Print("ObjectCreate() failed. Error code: ",GetLastError());
      return;
     }
//--- Ermitteln der Bildschirmkoordinaten anhand des zuvor erhaltenen Preises und der Zeit
   int x=0,y=0;
   if(!ChartTimePriceToXY(0,0,tick.time,tick.bid,x,y))
     {
      Print("New ChartTimePriceToXY() failed. Error code: ",GetLastError());
      return;
     }
//--- Setzen der Breite und Höhe des erstellten grafischen Label-Objekts mit der Breite und Höhe der grafischen Ressource.
//--- Setzen des Ankerpunkts des Objekts auf seine Mitte.
   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);
//--- kopierte grafische Ressource als Bilddatei für das grafische Label-Objekt festlegen
//--- in diesem Fall müssen wir, um den Namen der verwendeten grafischen Ressource anzugeben, "::" vor ihrem Namen hinzufügen
   ObjectSetString(0,obj_name2,OBJPROP_BMPFILE,"::"+rc_name+"Copy");
   
//--- Ändern der Farbe des neuen grafischen Etikettenobjekts
   Print("Wait 3 seconds before changing color to GreenYellow");
   Sleep(3000);
//--- Einstellen der Farbe GreenYellow mit einer Transparenz von 200
   clr=ColorToARGB(clrGreenYellow,200);
//--- Füllen des gesamten Pixelarrays der neuen grafischen Ressource mit der eingestellten Farbe
   ArrayInitialize(rc_data_copy,clr);
//--- Aktualisierung der grafischen Ressourcendaten
   Update(rc_name+"Copy",rc_data_copy,rc_width,rc_height,true);
   
//--- drei Sekunden warten und dann Ressourcen und beide Objekte löschen
   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);
  }
//+------------------------------------------------------------------+
//| Grafische Ressourcendaten aktualisieren                          |
//+------------------------------------------------------------------+
void Update(const string res_name,const uint &pixel_data[],const uint width,const uint height,const bool redraw)
  {
//--- Verlassen, wenn Dimensionen von 0 übergeben wurden
   if(width==0 || height==0)
      return;
//--- Ressourcendaten aktualisieren und den Chart neu zeichnen
   if(ResourceCreate(res_name,pixel_data,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE) && redraw)
      ChartRedraw();
  }

Siehe auch

Ressourcen, ObjectCreate(), ObjectSetString(), OBJPROP_BMPFILE