ResourceCreate
Hàm này tạo một tài nguyên hình ảnh dựa trên tập dữ liệu. Có hai biến thể của hàm:
Tạo tài nguyên dựa trên tệp
bool ResourceCreate(
const string resource_name, // Tên tài nguyên
const string path // Đường dẫn tương đối đến tệp
);
2
3
4
Tạo tài nguyên dựa trên mảng pixel
bool ResourceCreate(
const string resource_name, // Tên tài nguyên
const uint& data[], // Tập dữ liệu dưới dạng mảng
uint img_width, // Chiều rộng của tài nguyên hình ảnh
uint img_height, // Chiều cao của tài nguyên hình ảnh
uint data_xoffset, // Độ lệch ngang sang phải của góc trên bên trái của hình ảnh
uint data_yoffset, // Độ lệch dọc xuống dưới của góc trên bên trái của hình ảnh
uint data_width, // Chiều rộng tổng thể của hình ảnh dựa trên tập dữ liệu
ENUM_COLOR_FORMAT color_format // Phương pháp xử lý màu
);
2
3
4
5
6
7
8
9
10
Tham số
resource_name
[truyền vào] Tên tài nguyên.
data[][]
[truyền vào] Một mảng một chiều hoặc hai chiều để tạo ra một hình ảnh hoàn chỉnh.
img_width
[truyền vào] Chiều rộng của khu vực hình ảnh chữ nhật tính bằng pixel sẽ được đặt trong tài nguyên dưới dạng hình ảnh. Nó không thể lớn hơn giá trị data_width
.
img_height
[truyền vào] Chiều cao của khu vực hình ảnh chữ nhật tính bằng pixel sẽ được đặt trong tài nguyên dưới dạng hình ảnh.
data_xoffset
[truyền vào] Độ lệch ngang sang phải của khu vực chữ nhật của hình ảnh.
data_yoffset
[truyền vào] Độ lệch dọc xuống dưới của khu vực chữ nhật của hình ảnh.
data_width
[truyền vào] Chỉ cần cho mảng một chiều. Nó biểu thị chiều rộng đầy đủ của hình ảnh từ tập dữ liệu. Nếu data_width
=0, nó được giả định bằng img_width
. Đối với mảng hai chiều, tham số này bị bỏ qua và được giả định bằng kích thước thứ hai của mảng data[]
.
color_format
[truyền vào] Phương pháp xử lý màu, từ một giá trị trong liệt kê ENUM_COLOR_FORMAT.
Giá trị trả về
Trả về true
nếu thành công, ngược lại trả về false
. Để lấy thông tin về lỗi, gọi hàm GetLastError()
. Các lỗi sau có thể xảy ra:
- 4015 – ERR_RESOURCE_NAME_DUPLICATED (tên giống nhau của tài nguyên động và tĩnh)
- 4016 – ERR_RESOURCE_NOT_FOUND (không tìm thấy tài nguyên)
- 4017 – ERR_RESOURCE_UNSUPPORTED_TYPE (loại tài nguyên này không được hỗ trợ)
- 4018 – ERR_RESOURCE_NAME_IS_TOO_LONG (tên tài nguyên quá dài)
Ghi chú
Nếu phiên bản thứ hai của hàm được gọi để tạo cùng một tài nguyên với các tham số chiều rộng, chiều cao và độ lệch khác nhau, nó không tạo tài nguyên mới mà chỉ cập nhật tài nguyên hiện có.
Phiên bản đầu tiên của hàm được sử dụng để tải hình ảnh và âm thanh từ tệp, còn phiên bản thứ hai chỉ được sử dụng để tạo hình ảnh động.
Hình ảnh phải ở định dạng BMP với độ sâu màu 24 hoặc 32 bit. Âm thanh chỉ có thể ở định dạng WAV. Kích thước của tài nguyên không được vượt quá 16 Mb.
ENUM_COLOR_FORMAT
Định danh | Mô tả |
---|---|
COLOR_FORMAT_XRGB_NOALPHA | Thành phần của kênh alpha bị bỏ qua |
COLOR_FORMAT_ARGB_RAW | Các thành phần màu không được xử lý bởi terminal (phải được đặt chính xác bởi người dùng) |
COLOR_FORMAT_ARGB_NORMALIZE | Các thành phần màu được xử lý bởi terminal |
Ví dụ:
//+------------------------------------------------------------------+
//| Cập nhật dữ liệu tài nguyên đồ họa |
//+------------------------------------------------------------------+
void Update(const string res_name,const uint &pixel_data[],const uint width,const uint height,const bool redraw)
{
//--- rời khỏi nếu kích thước bằng 0 được truyền vào
if(width==0 || height==0)
return;
//--- Cập nhật dữ liệu tài nguyên và vẽ lại biểu đồ
if(ResourceCreate(res_name,pixel_data,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE) && redraw)
ChartRedraw();
}
//+------------------------------------------------------------------+
//| Hàm khởi động chương trình script |
//+------------------------------------------------------------------+
void OnStart()
{
//--- khai báo các tham số của tài nguyên đồ họa
string rc_name="Resource";
uint rc_width=100;
uint rc_height=100;
uint rc_data[];
uint rc_size=rc_width*rc_height;
ResetLastError();
//--- đặt kích thước của mảng pixel
if(ArrayResize(rc_data,rc_size)!=rc_size)
{
Print("ArrayResize() failed. Error code: ",GetLastError());
return;
}
//--- điền mảng pixel với màu trong suốt và tạo tài nguyên đồ họa dựa trên nó
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());
//--- kiểm tra tài nguyên đồ họa đã tạo
//--- lấy dữ liệu thời gian và giá của thanh hiện tại
MqlTick tick={};
if(!SymbolInfoTick(Symbol(),tick))
{
Print("SymbolInfoTick() failed. Error code: ",GetLastError());
return;
}
//--- tạo đối tượng Bitmap sử dụng tọa độ của giá và thời gian tick cuối cùng
string obj_name="Bitmap";
if(!ObjectCreate(0,obj_name,OBJ_BITMAP,0,tick.time,tick.bid))
{
Print("ObjectCreate() failed. Error code: ",GetLastError());
return;
}
//--- đặt chiều rộng và chiều cao của đối tượng bitmap đã tạo bằng chiều rộng và chiều cao của tài nguyên đồ họa
//--- đặt điểm neo của đối tượng vào trung tâm của nó
ObjectSetInteger(0,obj_name,OBJPROP_XSIZE,rc_width);
ObjectSetInteger(0,obj_name,OBJPROP_YSIZE,rc_height);
ObjectSetInteger(0,obj_name,OBJPROP_ANCHOR,ANCHOR_CENTER);
//--- chỉ định tài nguyên đồ họa đã tạo trước đó cho đối tượng bitmap dưới dạng tệp hình ảnh
//--- trong trường hợp này, để chỉ ra tên của tài nguyên đồ họa được sử dụng, cần thêm "::" trước tên của nó
ObjectSetString(0,obj_name,OBJPROP_BMPFILE,"::"+rc_name);
//--- đặt màu DodgerBlue với độ trong suốt 200
uint clr=ColorToARGB(clrDodgerBlue,200);
//--- điền toàn bộ mảng pixel của tài nguyên đồ họa với màu đã đặt
ArrayInitialize(rc_data,clr);
//--- cập nhật dữ liệu tài nguyên đồ họa
Update(rc_name,rc_data,rc_width,rc_height,true);
}
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Xem thêm
Resources
, ObjectCreate()
, ObjectSetString()
, OBJPROP_BMPFILE