ResourceReadImage

이 함수는 ResourceCreate() 함수에 의해 생성 되거나 컴파일 중에 EX5 파일에 저장된 그래픽 리소스에서 데이터를 읽습니다.

bool  ResourceReadImage(
   const string      resource_name,       // 읽을 수 있는 그래픽 리소스 이름
   uint&             data[],              // 리소스에서 데이터를 수신하기 위한 배열
   uint&             width,               // 리소스에서 이미지 너비를 수신
   uint&             height,              // 리소스에서 이미지 높이를 수신
   );

매개변수

resource_name

[in]  이미지를 포함하는 그래픽 리소스의 이름. 자체 리소스에 액세스하기 위해 이름은 "::resourcename" 형식으로 사용됩니다. 컴파일된 EX5 파일에서 리소스를 다운로드하는 경우 MQL5 디렉토리, 파일 및 리소스 이름에 대한 경로("path\\filename.ex5::resourcename")와 함께 전체 이름을 사용해야 합니다.

data[][]

[in]  그래픽 리소스에서 데이터를 수신하기 위한 1차원 또는 2차원 배열.

img_width

[out]  그래픽 리소스 이미지 너비(픽셀).

img_height

[out]  그래픽 리소스 이미지 높이(픽셀).

값 반환

성공하면 true, 그렇지 않은 경우 false. 오류에 대한 정보를 얻으려면 GetLastError() 함수를 호출.

주의

data[]그래픽 리소스를 생성하는데 사용하여, COLOR_FORMAT_ARGB_NORMALIZE 또는 COLOR_FORMAT_XRGB_NOALPHA 색 형식을 사용해야 합니다.

data[] 배열이 2차원이고 두 번째 차원이 X(폭) 그래픽 리소스 크기보다 작으면 ResourceReadImage() 함수가 false를 반환하고 읽기는 수행되지 않습니다. 그러나 리소스가 있으면 실제 이미지 크기가 폭 및 높이 매개변수로 돌아갑니다. 이를 통해 리소스에서 데이터를 다시 수신할 수 있습니다.

예:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 그래픽 리소스의 매개변수 선언
   string rc_name="Resource";
   uint   rc_width=100;
   uint   rc_height=100;
   uint   rc_data[];
   uint   rc_size=rc_width*rc_height;
 
   ResetLastError();
//--- 픽셀 배열의 크기를 설정합니다.
   if(ArrayResize(rc_data,rc_size)!=rc_size)
     {
      Print("ArrayResize() failed. Error code: ",GetLastError());
      return;
     }
//--- 픽셀 배열을 투명한 색상으로 채우고 이를 기반으로 그래픽 리소스를 만듭니다.
   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());
 
//--- 생성된 그래픽 리소스를 확인합니다.
//--- 현재 바의 시간과 가격 데이터를 가져옵니다.
   MqlTick tick={};
   if(!SymbolInfoTick(Symbol(),tick))
     {
      Print("SymbolInfoTick() failed. Error code: ",GetLastError());
      return;
     }
//--- 마지막 틱 가격과 시간의 좌표를 사용하여 Bitmap 객체를 생성합니다.
   string obj_name="Bitmap";
   if(!ObjectCreate(0,obj_name,OBJ_BITMAP,0,tick.time,tick.bid))
     {
      Print("ObjectCreate() failed. Error code: ",GetLastError());
      return;
     }
//--- 생성된 비트맵 객체의 너비와 높이를 그래픽 리소스의 너비와 높이와 동일하게 설정합니다.
//--- 객체 앵커 포인트를 중심으로 설정합니다.
   ObjectSetInteger(0,obj_name,OBJPROP_XSIZE,rc_width);
   ObjectSetInteger(0,obj_name,OBJPROP_YSIZE,rc_height);
   ObjectSetInteger(0,obj_name,OBJPROP_ANCHOR,ANCHOR_CENTER);
//--- 비트맵 객체에 대해 이전에 생성된 그래픽 리소스를 이미지 파일로 지정합니다.
//--- 이 경우 사용된 그래픽 리소스의 이름을 나타내기 위해 이름 앞에 "::"를 추가해야 합니다.
   ObjectSetString(0,obj_name,OBJPROP_BMPFILE,"::"+rc_name);
   
//--- 투명도 200으로 DodgerBlue 색상을 설정합니다.
   uint clr=ColorToARGB(clrDodgerBlue,200);
//--- 그래픽 리소스의 전체 픽셀 배열을 설정된 색상으로 채웁니다.
   ArrayInitialize(rc_data,clr);
//--- 그래픽 리소스 데이터 업데이트
   Update(rc_name,rc_data,rc_width,rc_height,true);
   
//--- 그래픽 리소스 데이터를 읽기 전에 3초 동안 기다립니다.
   Print("Wait 3 seconds before ResourceReadImage()");
   Sleep(3000);
//--- 리소스의 이미지를 새로운 픽셀 배열로 읽습니다.
   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;
     }
 
//--- 투명도 200으로 OrangeRed 색상을 설정합니다.
   clr=ColorToARGB(clrOrangeRed,200);
//--- 그래픽 리소스의 전체 픽셀 배열을 설정된 색상으로 채우고 이를 기반으로 새로운 그래픽 리소스를 생성합니다.
   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());
   
//--- 마지막 틱 가격과 시간의 좌표를 사용하여 "그래픽 라벨" 객체를 생성합니다.
   string obj_name2="BitmapLabel";
   if(!ObjectCreate(0,obj_name2,OBJ_BITMAP_LABEL,0,0,0))
     {
      Print("ObjectCreate() failed. Error code: ",GetLastError());
      return;
     }
//--- 이전에 받은 가격과 시간을 이용하여 화면 좌표를 가져옵니다.
   int x=0,y=0;
   if(!ChartTimePriceToXY(0,0,tick.time,tick.bid,x,y))
     {
      Print("New ChartTimePriceToXY() failed. Error code: ",GetLastError());
      return;
     }
//--- 생성된 그래픽 라벨 객체의 너비와 높이를 그래픽 리소스의 너비와 높이와 동일하게 설정합니다.
//--- 객체 앵커 포인트를 중심으로 설정합니다.
   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);
//--- 복사된 그래픽 리소스를 그래픽 라벨 객체의 이미지 파일로 설정합니다.
//--- 이 경우 사용된 그래픽 리소스의 이름을 나타내기 위해 이름 앞에 "::"를 추가해야 합니다.
   ObjectSetString(0,obj_name2,OBJPROP_BMPFILE,"::"+rc_name+"Copy");
   
//--- 새 그래픽 라벨 객체의 색상을 변경합니다.
   Print("Wait 3 seconds before changing color to GreenYellow");
   Sleep(3000);
//--- 투명도 200으로 GreenYellow 색상을 설정합니다.
   clr=ColorToARGB(clrGreenYellow,200);
//--- 새 그래픽 리소스의 전체 픽셀 배열을 설정된 색상으로 채웁니다.
   ArrayInitialize(rc_data_copy,clr);
//--- 그래픽 리소스 데이터 업데이트
   Update(rc_name+"Copy",rc_data_copy,rc_width,rc_height,true);
   
//--- 3초 동안 기다린 후 리소스와 두 객체를 모두 삭제합니다.
   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);
  }
//+------------------------------------------------------------------+
//| 그래픽 리소스 데이터 업데이트                                        |
//+------------------------------------------------------------------+
void Update(const string res_name,const uint &pixel_data[],const uint width,const uint height,const bool redraw)
  {
//--- 0차원이 전달되면 종료
   if(width==0 || height==0)
      return;
//--- 리소스 데이터를 업데이트하고 차트를 다시 그립니다.
   if(ResourceCreate(res_name,pixel_data,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE) && redraw)
      ChartRedraw();
  }

추가 참조

Resource, ObjectCreate(), ObjectSetString(), OBJPROP_BMPFILE