图像的裁剪(输出部分)
对于带有图片的图形对象(OBJ_BITMAP_LABEL 和 OBJ_BITMAP),MQL5 允许通过 OBJPROP_BMPFILE特性指定要显示的图像部分。要实现这一点,需要将对象的大小(OBJPROP_XSIZE 和 OBJPROP_YSIZE)设置为小于图像尺寸,并使用整数特性 OBJPROP_XOFFSET 和 OBJPROP_YOFFSET 设置可见矩形区域的左上角坐标。这两个特性分别设置从原始图像左边界和上边界开始的 X 轴和 Y 轴像素偏移量。

将图像的一部分输出到一个对象
通常,工具栏图标(按钮组、菜单等)会使用大型图像的局部区域来实现类似效果:相比用多个小文件储存单独图标,用一个文件储存所有图标更能高效利用资源。
测试脚本ObjectBitmapOffset.mq5创建了多个带图片的面板 (OBJ_BITMAP_LABEL),并且为所有这些面板在 OBJPROP_BMPFILE 特性中指定了相同的图形文件。然而,通过设置 OBJPROP_XOFFSET 和 OBJPROP_YOFFSET 特性,所有对象将显示图像的不同部分。
void SetupBitmap(const int i, const int x, const int y, const int size,
|
原始图像包含多个小图标,每个图标的尺寸为 46×46 像素。该脚本会将这些图标逐一“裁剪”出来,并垂直排列在窗口的右侧边缘。
以下展示了一个通用文件(/Files/MQL5Book/icons-322-46.bmp),以及在图表上的呈现效果。
![]()
含图标的 BMP 文件

图表上带图标的按钮对象