Cắt (hiển thị một phần) của hình ảnh
Đối với các đối tượng đồ họa có hình ảnh (OBJ_BITMAP_LABEL
và OBJ_BITMAP
), MQL5 cho phép bật hiển thị một phần của hình ảnh được chỉ định bởi thuộc tính OBJPROP_BMPFILE. Để làm điều này, bạn cần đặt kích thước của đối tượng (OBJPROP_XSIZE và OBJPROP_YSIZE) nhỏ hơn kích thước hình ảnh và đặt tọa độ của góc trên bên trái của phần hình chữ nhật hiển thị bằng các thuộc tính số nguyên OBJPROP_XOFFSET
và OBJPROP_YOFFSET
. Hai thuộc tính này lần lượt đặt khoảng cách dọc theo X và Y tính bằng pixel từ biên trái và biên trên của hình ảnh gốc.
Hiển thị một phần của hình ảnh vào đối tượng
Thông thường, kỹ thuật tương tự sử dụng một phần của hình ảnh lớn được dùng cho các biểu tượng thanh công cụ (tập hợp các nút, menu, v.v.): một tệp duy nhất chứa tất cả các biểu tượng cung cấp việc sử dụng tài nguyên hiệu quả hơn so với nhiều tệp nhỏ với các biểu tượng riêng lẻ.
Script thử nghiệm ObjectBitmapOffset.mq5
tạo ra một số bảng có hình ảnh (OBJ_BITMAP_LABEL
), và đối với tất cả chúng, cùng một tệp đồ họa được chỉ định trong thuộc tính OBJPROP_BMPFILE
. Tuy nhiên, do các thuộc tính OBJPROP_XOFFSET
và OBJPROP_YOFFSET
, tất cả các đối tượng hiển thị các phần khác nhau của hình ảnh.
void SetupBitmap(const int i, const int x, const int y, const int size,
const string imageOn, const string imageOff = NULL)
{
// tạo một đối tượng
const string name = ObjNamePrefix + "Tool-" + (string)i;
ObjectCreate(0, name, OBJ_BITMAP_LABEL, 0, 0, 0);
ObjectSetInteger(0, name, OBJPROP_CORNER, CORNER_RIGHT_UPPER);
ObjectSetInteger(0, name, OBJPROP_ANCHOR, ANCHOR_RIGHT_UPPER);
// vị trí và kích thước
ObjectSetInteger(0, name, OBJPROP_XDISTANCE, x);
ObjectSetInteger(0, name, OBJPROP_YDISTANCE, y);
ObjectSetInteger(0, name, OBJPROP_XSIZE, size);
ObjectSetInteger(0, name, OBJPROP_YSIZE, size);
// dịch chuyển trong hình ảnh gốc, theo đó phần thứ i được đọc
ObjectSetInteger(0, name, OBJPROP_XOFFSET, i * size);
ObjectSetInteger(0, name, OBJPROP_YOFFSET, 0);
// hình ảnh chung (tệp)
ObjectSetString(0, name, OBJPROP_BMPFILE, imageOn);
}
void OnStart()
{
const int icon = 46; // kích thước của một biểu tượng
for(int i = 0; i < 7; ++i) // lặp qua các biểu tượng trong tệp
{
SetupBitmap(i, 10, 10 + i * icon, icon,
"\\Files\\MQL5Book\\icons-322-46.bmp");
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Hình ảnh gốc chứa một số biểu tượng nhỏ, mỗi biểu tượng có kích thước 46 x 46 pixel. Script "cắt" chúng ra từng cái một và đặt chúng theo chiều dọc ở cạnh phải của cửa sổ.
Sau đây là tệp chung (/Files/MQL5Book/icons-322-46.bmp
), và những gì đã xảy ra trên biểu đồ.
Tệp BMP với các biểu tượng
Các đối tượng nút với biểu tượng trên biểu đồ