Графика в MetaTrader 5: Canvas - рисование внутри буфера с привязкой к объектам

 

В 619 билде появилась новая функция ResourceCreate для создания динамических графических ресурсов на лету.

С ее помощью теперь можно создавать любые сложные изображения в 32 битном цвете, включая альфа-канал и прикреплять их к объектам на графике.

Что это дает разработчикам:

  • программы могут на лету создавать красивые интерфейсы без необходимости таскать за собой массу файлов

  • дополнительные ресурсные файлы (не только BMP и WAV) можно добавлять прямо в EX5 файлах с помощью директивы #resource "имя файла", считывать их во время исполнения, модифицировать и накладывать на объекты

    в ближайшем билде будет доступна функции ResourceLoad(), которая позволит считывать ранее прикрепленные к EX5 файлу ресурсы

  • контролируя прозрачность с помощью альфа-каналов можно накладывать поверх графика любые аналитические построения

    например, можно рисовать полупрозрачное облако с предсказанием вероятных путей движения рынка, управляя цветом и насыщенностью

  • рисовать все что угодно на чарте


Скоро мы добавим в стандартную библиотеку класс CCanvas, которые позволяет легко манипулировать изображениями, рисуя их в своем буфере с выводом на привязанный объект.

Вот простой пример скрипта с демонстрацией работы этого класса (файлы приложены):

#include "Canvas.mqh"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   CCanvas can;
//---
   can.Create("MySpace",0,0,512,512,COLOR_FORMAT_ARGB_RAW);
   MathSrand(0);
//---
   for(int i=0;i<10000;i++)
     {
      can.FillRect(MathRand()&255,MathRand()&255,256+(MathRand()&255),256+(MathRand()&255),XRGB(MathRand(),MathRand(),MathRand()));
      can.Circle(MathRand()&511,MathRand()&511,MathRand()&127,XRGB(MathRand(),MathRand(),MathRand()));
      can.Triangle(MathRand()&511,MathRand()&511,MathRand()&511,MathRand()&511,MathRand()&511,MathRand()&511,XRGB(MathRand(),MathRand(),MathRand()));
      //---
      can.Update();
     }
//---
  }




Файлы:
Canvas.mqh  13 kb
 
Renat:

В 619 билде появилась новая функция ResourceCreate для создания динамических графических ресурсов на лету.

С ее помощью теперь можно создавать любые сложные изображения в 32 битном цвете, включая альфа-канал и прикреплять их к объектам на графике.

Что это дает разработчикам:

  • программы могут на лету создавать красивые интерфейсы без необходимости таскать за собой массу файлов

  • дополнительные ресурсные файлы (не только BMP и WAV) можно добавлять прямо в EX5 файлах с помощью директивы #resource "имя файла", считывать их во время исполнения, модифицировать и накладывать на объекты

    в ближайшем билде будет доступна функции ResourceLoad(), которая позволит считывать ранее прикрепленные к EX5 файлу ресурсы

...

Почти Photoshop. ))

Интересует, какие ещё можно будет форматы файлов использовать. Планируется ли добавлять файлы-документы? То есть, чтобы в файле *.ex5 можно было хранить файлы Справки, допустим в формате *.chm. Да и вообще любые файлы относящиеся, допустим, к офисному приложению Microsoft Office.

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

 
Мы будем контролировать опасные типы файлов, не разрешая хранить, считывать и записывать потенциально опасные данные. То есть, никаких вордов, chm и аналогичных файлов.

Считывать можно будет как картинки, так и другие данные. Картинки можно загружать напрямую в буферы, модифицировать их там и прикреплять результаты к объектам.
 
Renat:
Мы будем контролировать опасные типы файлов, не разрешая хранить, считывать и записывать потенциально опасные данные. То есть, никаких вордов, chm и аналогичных файлов.

Считывать можно будет как картинки, так и другие данные. Картинки можно загружать напрямую в буферы, модифицировать их там и прикреплять результаты к объектам.
Можно ли будет включать в программу *.ex5 перечисленные мной типы файлов, если будут предоставлены все исходники для проверки на вредоносность и наличие подключений к внешним библиотекам *.dll? Исходники при этом будут подробно закомментированы для облегчения проверки.
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала - Документация по MQL5
 
tol64:
Можно ли будет включать в программу *.ex5 перечисленные мной типы файлов, если будут предоставлены все исходники для проверки на вредоносность и наличие подключений к внешним библиотекам *.dll? Исходники при этом будут подробно закомментированы для облегчения проверки.

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

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

 

Посмотрите на примеры от MetaDriver с альфаканалами: https://www.mql5.com/ru/forum/138655/page3

 
Renat:

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

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

Спасибо за уточнение, но на всякий случай сформулирую ещё раз несколько иначе.

Допустим, я прислал на проверку к Вам программу для размещения её в Маркете. Я предоставляю все исходные коды. В коде MQL однозначно нет никаких подключенных *.dll файлов и Вы проводите проверку, чтобы в этом убедиться. Что мешает провести проверку и других подключенных, как ресурсы файлов, чтобы убедиться, что там тоже нет вредоносного кода?

Ещё пример. Допустим, файлы формата *.html нельзя подключать, как ресурсы, но программа может ведь сгенерировать отчёт в формате *.html. Он в любом случае окажется на компьютере пользователя. Да и вообще можно много разных форматов сгенерировать. Просветите, пожалуйста.

Renat:

Посмотрите на примеры от MetaDriver с альфаканалами: https://www.mql5.com/ru/forum/138655/page3

На моём компе всё летает. Круто в общем. Теперь можно разойтись на полную. )))

 
tol64:

Допустим, я прислал на проверку к Вам программу для размещения её в Маркете. Я предоставляю все исходные коды. В коде MQL однозначно нет никаких подключенных *.dll файлов и Вы проводите проверку, чтобы в этом убедиться. Что мешает провести проверку и других подключенных, как ресурсы файлов, чтобы убедиться, что там тоже нет вредоносного кода?

Дело в том, что никто не будет тратить ресурсы наших компаний на сложненную проверку чужих программ, а потом выслушивать в свою сторону потоки претензий.

Я понимаю, что многие считают нашу бесплатную работу чем-то совершенно обыденным и базовым, но это не означает, что мы будем брать на себя еще больше бесплатной и неблагодарной работы.

Со своей стороны мы через некоторое время включим механизмы автоматической проверки на антивирусах всех включаемых ресурсов у программ на маркете, чтобы снизить шанс прохождения совсем простых зловредов.

Ещё пример. Допустим, файлы формата *.html нельзя подключать, как ресурсы, но программа может ведь сгенерировать отчёт в формате *.html. Он в любом случае окажется на компьютере пользователя. Да и вообще можно много разных форматов сгенерировать. Просветите, пожалуйста.

Есть безусловно опасные файлы в виде исполнимых - их невозможно будет как включить в виде ресурсов, так и записать на диск из эксперта. То есть, форматы файлов (включая внутреннюю структуру) будут проверяться прямо во время записи на диск.

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

Все остальные файлы можно будет включать и записывать из MQL5.

 
Renat:

Дело в том, что никто не будет тратить ресурсы наших компаний на сложненную проверку чужих программ, а потом выслушивать в свою сторону потоки претензий.

Я понимаю, что многие считают нашу бесплатную работу чем-то совершенно обыденным и базовым, но это не означает, что мы будем брать на себя еще больше бесплатной и неблагодарной работы.

Со своей стороны мы через некоторое время включим механизмы автоматической проверки на антивирусах всех включаемых ресурсов у программ на маркете, чтобы снизить шанс прохождения совсем простых зловредов.

Спасибо. Ответом полностью удовлетворён. Мне просто нужно было уточнить эти моменты. Иногда даже для проверки небольшой по объёму программы уходит много времени и энергии, поэтому я понимаю все установленные Вами ограничения. Из двух зол разумнее выбирать меньшее.

Есть безусловно опасные файлы в виде исполнимых - их невозможно будет как включить в виде ресурсов, так и записать на диск из эксперта. То есть, форматы файлов (включая внутреннюю структуру) будут проверяться прямо во время записи на диск.

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

Все остальные файлы можно будет включать и записывать из MQL5.
Ренат, в таком случае нужен список, в котором должно быть обозначено, какие типы файлов можно записывать/генерировать, кроме csv, txt и bin, а какие нельзя. Мне это нужно не для вредительства, а для вИденья границ, в которых я могу творить. ))) Отсутствие этой информации приостанавливает мой проект, так как я не знаю, пройдёт ли тот или иной функционал, который я уже реализовал, для Маркета . Жаль, что раньше не уточнил. Я думал ограничение только в подключении dll.
 
tol64:

Спасибо. Ответом полностью удовлетворён. Мне просто нужно было уточнить эти моменты. Иногда даже для проверки небольшой по объёму программы уходит много времени и энергии, поэтому я понимаю все установленные Вами ограничения. Из двух зол разумнее выбирать меньшее.

Ренат, в таком случае нужен список, в котором должно быть обозначено, какие типы файлов можно записывать/генерировать, кроме csv, txt и bin, а какие нельзя. Мне это нужно не для вредительства, а для вИденья границ, в которых я могу творить. ))) Отсутствие этой информации приостанавливает мой проект, так как я не знаю, пройдёт ли тот или иной функционал, который я уже реализовал, для Маркета . Жаль, что раньше не уточнил. Я думал ограничение только в подключении dll.

Есть и вообще без расширений. например файл: hosts.

Небольшая модернизация и вуаля вы уже не владелец своего компа.

Можно потом поменять расширение файла с помощью kernel32.dll.

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

 
pusheax:
...

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

Разверните, пожалуйста, вот это предложение в контексте обсуждаемого вопроса.