ResourceCreate

Esta función crea un recurso de imagen a base de un conjunto de datos. Hay dos variantes de esta función:
Crear recurso a base de un archivo

bool  ResourceCreate(
   const string      resource_name,       // nombre del recurso
   const string      path                 // ruta relativa hacia el archivo
   );

Crear archivo a base de un array de píxeles

bool  ResourceCreate(
   const string      resource_name,       // nombre del recurso
   const uint&       data[],              // conjunto de datos en forma del array 
   uint              img_width,           // ancho del recurso de imagen a crear
   uint              img_height,          // alto del recurso de imagen a crear
   uint              data_xoffset,        // desplazamiento horizontal a la derecha de la esquina superior izquierda de la imagen a crear 
   uint              data_yoffset,        // desplazamiento vertical hacia abajo de la esquina superior izquierda de la imagen a crear
   uint              data_width,          // ancho total de la imagen basado en el conjunto de datos 
   ENUM_COLOR_FORMAT color_format         // modo de procesar el color
   );

Parámetros

resource_name

[in]  Nombre del recurso.

data[][]

[in]  Un array unidimensional o bidimencional (matriz) para crear una imagen completa.

img_width

[in]  Ancho del área rectangular de la imagen en píxeles para colocarse en el recurso en forma de la imagen. No puede ser mayor que el valor de data_width.

img_height

[in]  Alto del área rectangular de la imagen en píxeles para colocarse en el recurso en forma de la imagen.

data_xoffset

[in]  Desplazamiento horizontal a la derecha del área rectangular de la imagen en píxeles.

data_yoffset

[in]  Desplazamiento vertical hacia abajo del área rectangular de la imagen en píxeles.

data_width

[in]  Se requiere sólo para los arrays unidimensionales, y significa el ancho total de la imagen que se crea a base del conjunto de datos. Si data_width=0, entonces se supone que es igual a img_width. Para los arrays bidimensionales este parámetro se ignora y se acepta que equivale a la segunda dimensión del array data[].

color_format

[in]  Modo de procesar el color desde la enumeración ENUM_COLOR_FORMAT.

Valor devuelto

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

  • 4015 — ERR_RESOURCE_NAME_DUPLICATED (coincidencia de los nombres del recurso dinámico y estático),
  • 4016 — ERR_RESOURCE_NOT_FOUND (recurso no encontrado),
  • 4017 — ERR_RESOURCE_UNSUPPORTED_TYPE (tipo del recurso no se soporta),
  • 4018 — ERR_RESOURCE_NAME_IS_TOO_LONG (nombre del recurso demasiado largo).

Nota

Si la segunda versión de la función se llama para la creación del mismo recurso con diferentes parámetros del ancho, alto y desplazamiento, el nuevo recurso no se vuelve a crear sino se actualiza el ya existente.

La primera variante de la función permite cargar las imágenes y sonidos desde archivos, mientras que la segunda versión sirve únicamente para la creación dinámica las imágenes.

Las imágenes deben ir en el formato BMP con la profundidad del color de 24 o 32 bits, los sonidos pueden tener sólo el formato WAV. El tamaño del recurso no puede ser más de 16 Mb.

ENUM_COLOR_FORMAT

Identificador

Descripción

COLOR_FORMAT_XRGB_NOALPHA

El componente del canal alfa se ignora

COLOR_FORMAT_ARGB_RAW

Los componentes del color no se procesan por el terminal (deben ser fijados correctamente por el usuario)  

COLOR_FORMAT_ARGB_NORMALIZE

Los componentes del color se procesan por el terminal  

Ejemplo:

//+------------------------------------------------------------------+
//| 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();
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- declaramos los parámetros del recurso gráfico
   string rc_name="Resource";
   uint   rc_width=100;
   uint   rc_height=100;
   uint   rc_data[];
   uint   rc_size=rc_width*rc_height;
 
   ResetLastError();
//--- establecemos el tamaño del array de píxeles
   if(ArrayResize(rc_data,rc_size)!=rc_size)
     {
      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(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());
 
//--- 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,rc_width);
   ObjectSetInteger(0,obj_name,OBJPROP_YSIZE,rc_height);
   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,"::"+rc_name);
   
//--- establecemos el color DodgerBlue con una transparencia 200
   uint clr=ColorToARGB(clrDodgerBlue,200);
//--- rellenamos todo el array de píxeles del recurso gráfico con el color establecido
   ArrayInitialize(rc_data,clr);
//--- actualizamos los datos del recurso gráfico
   Update(rc_name,rc_data,rc_width,rc_height,true);
  }

Véase también

Recursos, ObjectCreate(), ObjectSetString(), OBJPROP_BMPFILE