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]  资源名称。

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 (资源名称太长)

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();
  }
//+------------------------------------------------------------------+
//| 脚本程序起始函数                                                   |
//+------------------------------------------------------------------+
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