ResourceCreate

Создает ресурс изображения на основе набора данных. Существует два варианта функции:
Создание ресурса на основе файла

bool  ResourceCreate(
   const string      resource_name,       // имя ресурса
   const string      path                 // относительный путь к файлу
   );

Динамическое создание ресурса на основе массива пикселей

bool  ResourceCreate(
   const string      resource_name,       // имя ресурса
   const uint&       data[],              // набор данных в виде массива 
   uint              img_width,           // ширина создаваемой картинки-ресурса
   uint              img_height,          // высота создаваемой картинки-ресурса
   uint              data_xoffset,        // смещение левого верхнего угла создаваемой картинки по горизонтали вправо
   uint              data_yoffset,        // смещение левого верхнего угла создаваемой картинки по вертикали вниз
   uint              data_width,          // общая ширина изображения на основе набора данных
   ENUM_COLOR_FORMAT color_format         // способ обработки цвета
   );

Параметры

resource_name

[in]  Имя ресурса.

path

[in]  Относительный путь к файлу, содержащему данные для ресурса. Если путь начинается с обратной косой черты "\" (пишется "\\"), то файл ищется относительно папки каталог_данных_терминала\MQL5\. Если обратной косой черты нет, то ресурс ищется относительно расположения EX5-файла, из которого вызывается функция.

data[][]

[in]  Одномерный или двумерный массив для создания полного изображения.

img_width

[in]  Ширина прямоугольной области изображения в пикселях для помещения в ресурс в виде картинки. Не может быть больше значения data_width.

img_height

[in]  Высота прямоугольной области изображения в пикселях для помещения в ресурс  в виде картинки.

data_xoffset

[in]  Смещение в пикселях прямоугольной области изображения по горизонтали вправо.

data_yoffset

[in]  Смещение в пикселях прямоугольной области изображения по вертикали вниз.

data_width

[in]  Требуется только для одномерных массивов и означает полную ширину создаваемого изображения из набора данных. Если data_width=0, то подразумевается равным img_width. Для двумерных массивов данный параметр игнорируется и принимается равным второй размерности массива data[].

color_format

[in]  Способ обработки цвета из перечисления ENUM_COLOR_FORMAT.

Возвращаемое значение

true – в случае успеха, иначе false. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError(). Возможные ошибки:

  • 4015 – ERR_RESOURCE_NAME_DUPLICATED (совпадение имен динамического и статического ресурсов),
  • 4016 – ERR_RESOURCE_NOT_FOUND (ресурс не найден),
  • 4017 – ERR_RESOURCE_UNSUPPORTED_TYPE (тип ресурса не поддерживается),
  • 4018 – ERR_RESOURCE_NAME_IS_TOO_LONG (слишком длинное имя ресурса).

Примечание

Если второй вариант функции вызывается для создания одного и того же ресурса с разными параметрами ширины, высоты и сдвига, то новый ресурс не пересоздается, а просто обновляется существующий.

Первый вариант функции позволяет загружать из файлов картинки и звуки, второй вариант предназначен только для динамического создания изображений.

Картинки должны быть в формате BMP с глубиной цвета 24 или 32 бита, звуки могут быть только в формате WAV. Размер ресурса не должен превышать 16 Mb.
 

ENUM_COLOR_FORMAT

Идентификатор

Описание

COLOR_FORMAT_XRGB_NOALPHA

Компонента альфа-канала игнорируется

COLOR_FORMAT_ARGB_RAW

Компоненты цвета не обрабатываются терминалом (должны быть корректно заданы пользователем)  

COLOR_FORMAT_ARGB_NORMALIZE

Компоненты цвета обрабатываются терминалом  

Пример:

//+------------------------------------------------------------------+
//| Обновляет данные графического ресурса                            |
//+------------------------------------------------------------------+
void Update(const string res_name,const uint &pixel_data[],const uint width,const uint height,const bool redraw)
  {
//--- если переданы нулевые размеры - уходим
   if(width==0 || height==0)
      return;
//--- обновляем ресурсные данные и перерисовываем график
   if(ResourceCreate(res_name,pixel_data,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE) && redraw)
      ChartRedraw();
  }
//+------------------------------------------------------------------+
//| 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;
     }
//--- создаём объект "Рисунок" на координатах цены и времени последнего тика
   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);
   
//--- установим цвет DodgerBlue с прозрачностью 200
   uint clr=ColorToARGB(clrDodgerBlue,200);
//--- заполним установленным цветом весь массив пикселей графического ресурса
   ArrayInitialize(rc_data,clr);
//--- обновим данные графического ресурса
   Update(rc_name,rc_data,rc_width,rc_height,true);
  }

Смотри также

Ресурсы, ObjectCreate(), ObjectSetString(), OBJPROP_BMPFILE