Canvas - это круто! - страница 86

 
Aleksandr Slavskii #:

Можно вставить файл в виде массива, а затем обращаться к этому массиву.


Прикрепил пример

Да, кстати, это работает. Не знал о такой возможности. Спасибо!
Только вот размер mq4 или mqh файла будет в 5 раз больше самого png файла. Но вполне рабочий вариант, т.к. не влияет на размер самого ex4 файла. (он будет таким же как и ex5 файл)

fxsaber #:

Попросить разработчиков вставить сюда PNG.

Уверен, согласятся.

сомневаюсь, что для MT4 будут реализовывать какие-либо пожелания и просьбы, тем более когда уже объявлено о скором окончании поддержки MT4

 
Vitaliy Kuznetsov #:

С внешними PNG разобрался, подгрузка, масштаб, прозрачность работает. Но...

А вообще реально во внутрь файла скомпилировать PNG?

Штатный функционал ...

#resource "\\Files\\123.png"

string nam_img = "::Files\\123.png"

... выдаёт ошибку компиляции

Я что-то сразу не вник в то, что софт работает с внешним файлом, однако как сделать, чтобы весь конечный продукт был одним файлом?

А то теряется практический смысл такой фичи. В МТ5 не пробовал. В МТ4 ошибка присоединения.


P.S. Предположу, что теоретически возможно написать скрипт, который переделает PNG в код и мы его положим, скажем в MQH и будем уже с ними работать в составе одного контейнера. Но мне такое не по силам написать. Картинки-массивы для меня глухой лес.

Кроме того что предложил Александр (через вставку массива uchar[]) есть еще костыльный способ через псевдо BMP, о чем уже говорил

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Canvas - это круто!

Nikolai Semko, 2023.09.25 17:09 

К сожалению в MQL4 нет возможности прикреплять ресурс как массив. Но все остальное работает.
Можно конечно реализовать через жёсткие бубны. Например, вставить PNG изображение в BMP файл, т.е в начало png добавить шапку BMP формата, а сам png передавать как растр bmp( т.е. если открыть такой BMP, то будет шум из цветных пикселей разной прозрачности). А потом прикрепить этот "bmp файл", как ресурс в MQL4. Это может понадобиться для маркета, чтобы ex4 уже содержал изображение более плотного формата png.
Для справки: png примерно в 10 раз меньше того же BMP изображения без потери качества, в добавок поддерживая полноценную прозрачность.
Правда сам bmp ресурс в ex5(ex4) файле хранится в уплотненном  формате, но не на порядок меньше. Надо проверить точно.

можно написать скрипт, который выполняет подобную конвертацию из png в bmp (размер псевдо-изображения такого файла будет по ширине равной размеру самого png файла, а по высоте 1 пиксель).
Но можно обойтись все же другим алгоритмом: PNG c прозрачностью преобразовать в реальный BMP с прозрачностью и прикрепить его через ресурс. Размер ex4 файла будет чуть больше чем размер с png файлом, т.к. в ex4 ресурс bmp файла хранится в упакованном формате. Я проверял - увеличение размера ex4 с bmp будет на 10-30% больше, чем ex4 c тем же изображением в формате png.

Лично я бы предпочел вариант, который предложил Славский. В отдельный mqh файл вынести отдельный uchar массив, который будет содержать сам png файл, а потом вставить его в код через инклуд, чтоб гигантский массив не загромождал код. 
Более того плюсом такого способа является то, что не надо помещать никаких графических файлов в MQL4 песочницу, как в случае через ресурсы.

 
fxsaber #:

Попросить разработчиков вставить сюда PNG.

Уверен, согласятся.

Добавим в MQL5.

 
Aleksandr Slavskii #:

Можно вставить файл в виде массива, а затем обращаться к этому массиву.

Прикрепил пример

абалдеть, и давно эта менюшка "Вставить" в ME есть? :O

век живи - век учись...

 
Renat Fatkhullin #:

Добавим в MQL5.

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


На MQL5 и сейчас можно прикрепить любой файл.

// resource variables are supported by MQL5 language only
#resource "\\Files\\Picture.png" as uchar PNGBytes[]
При таком прикреплении будет создан статический массив с данными, а не ресурс. Во втором случае, вроде, он доступен из других EX4/5.
 
Nikolai Semko #:
PNG c прозрачностью преобразовать в реальный BMP с прозрачностью и прикрепить его через ресурс.

Такой вариант в МТ4 не работает, т.к. BMP с альфа-каналом прикрепляется, но не отображается.

fxsaber #:

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

Так вроде PNG уже кроссплатформенный стал. С внешними файлами уже работает. Примеры выше от Николая.

Aleksandr Slavskii #:

Можно вставить файл в виде массива, а затем обращаться к этому массиву.

Действительно, вставляется. Я прямо удивился.


Осталось попробовать реализовать в Canvas всю приблуду с резиновостью, прозрачностью и всё, - небольшое mq4 чудо готово.

Естественно, такое делается для кроссплатформенности. А то на МТ4 - BMP, а на MT5 - PNG. Не айс. Надо всё PNG.

 
Vitaliy Kuznetsov #:

Осталось попробовать реализовать в Canvas всю приблуду с резиновостью, прозрачностью и всё, - небольшое mq4 чудо готово.

Так уже все готово. Можно взять пример теста из PNG библиотеки. Только строчку с ресурсом

#resource "//Images//icons.png" as uchar png_data[]

поменять на строчку

#include <PNG\iconspng.mqh>

где в файле iconspng.mqh вставляем массив png_data[]

Только необходимо помнить, что в МТ4 важно из OnChartEvent выводить все затратные вычисления в таймер, иначе будет жутко лагать. Чисто MQL4 херня.
сейчас сброшу вариант нелагающей версии.


 
Nikolai Semko #:

сейчас сброшу вариант нелагающей версии.

Да, даже не лагает, если проц находится в режиме "best perfomance".


Файлы:
MQL4.ZIP  576 kb
 
Andrey Dik #:

абалдеть, и давно эта менюшка "Вставить" в ME есть? :O

век живи - век учись...

Среди моих файлов, где я экспериментировал с такой вставкой файлов, нашёлся файл созданный в ноябре 2019г. А заинтересовало это меня ещё раньше. К сожалению я не нашёл тот скрипт где из такого массива сохранялся файл изображения.

 
Alexey Viktorov #:

Среди моих файлов, где я экспериментировал с такой вставкой файлов, нашёлся файл созданный в ноябре 2019г. А заинтересовало это меня ещё раньше. К сожалению я не нашёл тот скрипт где из такого массива сохранялся файл изображения.


супер! удобная фишка.
хотя, вставка ex5  могла бы быть ещё удобнее, если бы выводились объявления экспортируемых функций
Причина обращения: