ResourceReadImage

A função lê os dados do recurso gráfico criado pela função ResourceCreate() ou salvo como arquivo EX5 durante a compilação.

bool  ResourceReadImage(
   const string      resource_name,       // nome do recurso gráfico para leitura
   uint&             data[],              // array recebendo dados a partir do recurso
   uint&             width,               // para receber a largura da imagem no recurso
   uint&             height,              // para receber a altura da imagem no recurso
   );

Parâmetros

resource_name

[in]  Nome do recurso gráfico contendo uma imagem. Para acessar novamente seus próprios recursos, o nome é usado em formato abreviado "::resourcename". Se baixamos um recurso a partir de uma compilação de arquivo EX5, o nome completo seria usado com o caminho relativo do diretório MQL5, nomes do arquivo e recurso - "path\\filename.ex5::resourcename".

data[][]

[in]  Array uni- ou bi-dimensional para recebimento de dados do recurso gráfico.

img_width

[out]  Recurso gráfico da largura da imagem em pixels.

img_height

[out]  Recurso gráfico da altura da imagem em pixels.

Valor de retorno

true se bem sucedido, caso contrário false. Para obter informações sobre o erro, chamar a função GetLastError().

Observação

Se é array data[], então será usado para criar um recurso gráfico, formatos de cor COLOR_FORMAT_ARGB_NORMALIZE ou COLOR_FORMAT_XRGB_NOALPHA devem ser utilizados.

Se é array data[] bidimensional e sua segunda dimensão é menor do que X (largura) tamanho do recurso gráfico,a função ResourceReadImage() retorna falso e a leitura não é executada. Mas se o recurso existe, o tamanho da imagem real é retornada pelos parâmetros de largura e altura. Isto permitirá fazer outra tentativa para receber dados a partir do recurso.

Exemplo:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- declaramos os parâmetros do 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();
//--- definimos o tamanho do array de pixels
   if(ArrayResize(rc_data,rc_size)!=rc_size)
     {
      Print("ArrayResize() failed. Error code: ",GetLastError());
      return;
     }
//--- preenchemos o array de pixels com cor transparente e com base nele criamos um recurso gráfico
   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());
 
//--- verificamos o recurso gráfico criado
//--- obtemos os dados de tempo e preço da barra atual
   MqlTick tick={};
   if(!SymbolInfoTick(Symbol(),tick))
     {
      Print("SymbolInfoTick() failed. Error code: ",GetLastError());
      return;
     }
//--- criamos um objeto "Desenho" nas coordenadas de preço e tempo do ú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;
     }
//--- definimos para o objeto-desenho a largura e a altura iguais às do recurso gráfico.
//--- definimos o ponto de ancoragem do objeto pelo seu 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);
//--- especificamos para o objeto-desenho o arquivo de imagem do recurso gráfico criado anteriormente
//--- Neste caso, para indicar o nome do recurso gráfico usado, deve-se escrever "::" antes de seu nome
   ObjectSetString(0,obj_name,OBJPROP_BMPFILE,"::"+rc_name);
   
//--- definimos a cor DodgerBlue com transparência de 200
   uint clr=ColorToARGB(clrDodgerBlue,200);
//--- preenchemos com a cor definida todo o array de pixels do recurso gráfico
   ArrayInitialize(rc_data,clr);
//--- atualizamos os dados do recurso gráfico
   Update(rc_name,rc_data,rc_width,rc_height,true);
   
//--- esperamos 3 segundos antes de ler os dados do recurso gráfico
   Print("Wait 3 seconds before ResourceReadImage()");
   Sleep(3000);
//--- lemos a imagem do recurso para um novo array 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;
     }
 
//--- definimos a cor OrangeRed com transparência de 200
   clr=ColorToARGB(clrOrangeRed,200);
//--- preenchemos com a cor definida todo o array de pixels e com base nele criamos um novo recurso gráfico
   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());
   
//--- criamos um objeto "Marca Gráfica" nas coordenadas de preço e tempo do último tick
   string obj_name2="BitmapLabel";
   if(!ObjectCreate(0,obj_name2,OBJ_BITMAP_LABEL,0,0,0))
     {
      Print("ObjectCreate() failed. Error code: ",GetLastError());
      return;
     }
//--- obtemos as coordenadas de tela com base no preço e tempo obtidos anteriormente
   int x=0,y=0;
   if(!ChartTimePriceToXY(0,0,tick.time,tick.bid,x,y))
     {
      Print("New ChartTimePriceToXY() failed. Error code: ",GetLastError());
      return;
     }
//--- definimos para o objeto-marca gráfica a largura e a altura iguais às do recurso gráfico
//--- definimos o ponto de ancoragem do objeto pelo seu 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);
//--- especificamos para o objeto-marca gráfica o arquivo de imagem do recurso gráfico copiado
//--- neste caso, para indicar o nome do recurso gráfico usado, deve-se escrever "::" antes de seu nome
   ObjectSetString(0,obj_name2,OBJPROP_BMPFILE,"::"+rc_name+"Copy");
   
//--- mudamos a cor do novo objeto-marca gráfica
   Print("Wait 3 seconds before changing color to GreenYellow");
   Sleep(3000);
//--- definimos a cor GreenYellow com transparência de 200
   clr=ColorToARGB(clrGreenYellow,200);
//--- preenchemos com a cor definida todo o array de pixels do novo recurso gráfico
   ArrayInitialize(rc_data_copy,clr);
//--- atualizamos os dados do recurso gráfico
   Update(rc_name+"Copy",rc_data_copy,rc_width,rc_height,true);
   
//--- esperamos três segundos e deletamos os recursos e ambos os objetos
   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);
  }
//+------------------------------------------------------------------+
//| Atualizamos os dados do recurso gráfico                          |
//+------------------------------------------------------------------+
void Update(const string res_name,const uint &pixel_data[],const uint width,const uint height,const bool redraw)
  {
//--- se forem passados tamanhos nulos, saímos
   if(width==0 || height==0)
      return;
//--- atualizamos os dados do recurso e redesenhamos o gráfico
   if(ResourceCreate(res_name,pixel_data,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE) && redraw)
      ChartRedraw();
  }

Também Veja

Recursos, ObjectCreate(), ObjectSetString(), OBJPROP_BMPFILE