ResourceSave

Guarda el recurso en el archivo especificado.

bool  ResourceSave(
   const string  resource_name      // nombre del recurso
   const string  file_name          // nombre del archivo
   );

Parámetros

resource_name

[in]  El nombre del recurso debe empezarse con "::".

file_name

[in]  Nombre del archivo respecto a MQL5\Files.

Valor devuelto

Devuelve true en caso de éxito, de lo contrario devuelve false. Para obtener la información sobre el error, hay que llamar a la función GetLastError().

Nota

La función siempre sobrescribe el archivo, creando si precisa todas las subcarpetas intermedias en el nombre del archivo, en caso de no haberlas.

Véase también

Recursos, ObjectCreate(), PlaySound(), ObjectSetString(), OBJPROP_BMPFILE

Ejemplo:

//--- parámetros del recurso gráfico
string ExtResName="Resource";
int    ExtResWidth=100;
int    ExtResHeight=100;
uint   ExtResData[];
int    ExtResSize=ExtResWidth*ExtResHeight;
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ResetLastError();
//--- establecemos el tamaño del array en píxeles
   if(ArrayResize(ExtResData,ExtResSize)!=ExtResSize)
     {
      Print("ArrayResize() failed. Error code: ",GetLastError());
      return;
     }
//--- rellenamos la matriz de píxeles con un color transparente y creamos un recurso gráfico basado en él
   ArrayInitialize(ExtResData,0x00FFFFFF);
   if(!ResourceCreate(ExtResName,ExtResData,ExtResWidth,ExtResHeight,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE))
     {
      Print("ResourceCreate() failed. Error code: ",GetLastError());
      return;
     }
   Print("Size of created recource array: ",ExtResData.Size());
 
//--- comprobamos el recurso gráfico creado.
//--- obtenemos los datos de hora y precio de la siguiente barra
   MqlTick tick={};
   if(!SymbolInfoTick(Symbol(),tick))
     {
      Print("SymbolInfoTick() failed. Error code: ",GetLastError());
      return;
     }
//--- creamos un objeto "Dibujo" en las coordenadas del precio y la hora del último tick
   string obj_name="Bitmap";
   if(!ObjectCreate(0,obj_name,OBJ_BITMAP,0,tick.time,tick.bid))
     {
      Print("ObjectCreate() failed. Error code: ",GetLastError());
      return;
     }
//--- establecemos una anchura y una altura del objeto de dibujo creado igual a la anchura y la altura del recurso gráfico.
//--- establecemos el punto de anclaje del objeto en su centro.
   ObjectSetInteger(0,obj_name,OBJPROP_XSIZE,ExtResWidth);
   ObjectSetInteger(0,obj_name,OBJPROP_YSIZE,ExtResHeight);
   ObjectSetInteger(0,obj_name,OBJPROP_ANCHOR,ANCHOR_CENTER);
//--- establecemos un recurso gráfico creado previamente como archivo de imagen para el objeto de dibujo
//--- en este caso, para especificar el nombre del recurso gráfico que se va a utilizar, debemos añadir antes de su nombre "::"
   ObjectSetString(0,obj_name,OBJPROP_BMPFILE,"::"+ExtResName);
   
//--- establecemos el color GreenYellow con una transparencia 200
   uint clr=ColorToARGB(clrGreenYellow,200);
//--- rellenamos todo el array de píxeles del recurso gráfico con el color establecido
   ArrayInitialize(ExtResData,clr);
//--- dibujamos una cuadrícula con el color DodgerBlue
   for(int x=0;x<ExtResWidth;x+=9)
      LineVertical(x,0,ExtResHeight,ColorToARGB(clrDodgerBlue,200));
   for(int y=0;y<ExtResHeight;y+=9)
      LineHorizontal(0,ExtResWidth,y,ColorToARGB(clrDodgerBlue,200));
//--- actualizamos los datos del recurso gráfico
   Update(ExtResName,ExtResData,ExtResWidth,ExtResHeight,true);
   
//--- esperamos 3 segundos antes de eliminar el recurso y el objeto gráfico
   Print("Wait 3 seconds before deleting the resource and graphic object");
   Sleep(3000);
 
//--- guardamos el recurso en un archivo
   ResetLastError();
   if(!ResourceSave("::"+ExtResName,"ResourceSave\\"+ExtResName+".bmp"))
     {
      Print("ResourceSave() failed. Error code: ",GetLastError());
      return;
     }
//--- eliminamos el recurso y el objeto de dibujo gráfico
   if(!ResourceFree("::"+ExtResName))
     {
      Print("ResourceFree() failed. Error code: ",GetLastError());
      return;
     }
   if(!ObjectDelete(0,obj_name))
     {
      Print("ObjectDelete() failed. Error code: ",GetLastError());
      return;
     }
 
//--- ahora creamos un nuevo objeto "Etiqueta gráfica" en las coordenadas del precio y la hora del último tick, desplazado a la izquierda según la anchura de la imagen
//--- obtenemos las coordenadas de pantalla según el precio y la hora obtenidos previamente
   int x=0,y=0;
   if(!ChartTimePriceToXY(0,0,tick.time,tick.bid,x,y))
     {
      Print("ChartTimePriceToXY() failed. Error code: ",GetLastError());
      return;
     }
   obj_name="BitmapLabel";
   if(!ObjectCreate(0,obj_name,OBJ_BITMAP_LABEL,0,0,0))
     {
      Print("ObjectCreate() failed. Error code: ",GetLastError());
      return;
     }
//--- establecemos el punto de anclaje del objeto en su centro.
   ObjectSetInteger(0,obj_name,OBJPROP_ANCHOR,ANCHOR_CENTER);
//--- establecemos para el objeto de etiqueta gráfica las coordenadas del precio y la hora del último tick, desplazadas a la izquierda según la anchura de la imagen
   ObjectSetInteger(0,obj_name,OBJPROP_XDISTANCE,x-ExtResWidth);
   ObjectSetInteger(0,obj_name,OBJPROP_YDISTANCE,y);
//--- especificamos el recurso previamente guardado como una imagen bmp para el objeto de etiqueta gráfica como un archivo de imagen
   ObjectSetString(0,obj_name,OBJPROP_BMPFILE,"\\Files\\ResourceSave\\"+ExtResName+".bmp");
//--- actualizamos el gráfico
   ChartRedraw();
   
//--- esperamos 3 segundos antes de eliminar el objeto de etiqueta gráfica
   Print("Wait 3 seconds before deleting the new graphic object");
   Sleep(3000);
   if(!ObjectDelete(0,obj_name))
      Print("ObjectDelete() failed. Error code: ",GetLastError());
  }
//+------------------------------------------------------------------+
//| Actualiza los datos de los recursos gráficos                     |
//+------------------------------------------------------------------+
void Update(const string res_name,const uint &pixel_data[],const uint width,const uint height,const bool redraw)
  {
//--- si se ha transmitido un tamaño cero, salimos
   if(width==0 || height==0)
      return;
//--- actualizamos los datos de los recursos y redibujamos el gráfico
   if(ResourceCreate(res_name,pixel_data,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE) && redraw)
      ChartRedraw();
  }
//+------------------------------------------------------------------+
//| Dibuja una línea vertical                                        |
//+------------------------------------------------------------------+
void LineVertical(int x,int y1,int y2,const uint clr)
  {
   int tmp;
//--- clasificación según Y
   if(y1>y2)
     {
      tmp=y1;
      y1 =y2;
      y2 =tmp;
     }
//--- línea furea de la imagen
   if(y2<0 || y1>=ExtResHeight || x<0 || x>=ExtResWidth)
      return;
//--- permanecemos dentro de los límites de la imagen
   if(y1<0)
      y1=0;
   if(y2>=ExtResHeight)
      y2=ExtResHeight-1;
//--- dibujamos la línea
   int index=y1*ExtResWidth+x;
   for(int i=y1i<=y2i++,index+=ExtResWidth)
      ExtResData[index]=clr;
  }
//+------------------------------------------------------------------+
//| Dibuja una línea horizontal                                      |
//+------------------------------------------------------------------+
void LineHorizontal(int x1,int x2,int y,const uint clr)
  {
   int tmp;
//--- clasificación según X
   if(x1>x2)
     {
      tmp=x1;
      x1 =x2;
      x2 =tmp;
     }
//--- línea furea de la imagen
   if(x2<0 || x1>=ExtResWidth || y<0 || y>=ExtResHeight)
      return;
//--- permanecemos dentro de los límites de la imagen
   if(x1<0)
      x1=0;
   if(x2>=ExtResWidth)
      x2=ExtResWidth-1;
//--- dibujamos la línea
   ArrayFill(ExtResData,y*ExtResWidth+x1,(x2-x1)+1,clr);
  }