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

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

Я кстати, так и не смог на MQL4 вставить BMP с альфа-каналом, когда картинка как и png имеет прозрачность. Он или не показывается или не компилится.

Вот тут было обсуждение https://www.mql5.com/en/forum/157832 В итоге для МТ5 лишь подходит. Зато интересно, что BMP существуют с альфа-каналом.

С PNG тоже не вышло.. или не дошло, как.


По поводу полотна и масштабирования, Спасибо, попробую на mq4.

 
Vitaliy Kuznetsov #:

Я кстати, так и не смог на MQL4 вставить BMP с альфа-каналом, когда картинка как и png имеет прозрачность. Он или не показывается или не компилится.

Вот тут было обсуждение https://www.mql5.com/en/forum/157832 В итоге для МТ5 лишь подходит. Зато интересно, что BMP существуют с альфа-каналом.

С PNG тоже не вышло.. или не дошло, как.


По поводу полотна и масштабирования, Спасибо, попробую на mq4.

в MQL4 бага с морганием нет.
Во вложении mql4 версия

Файлы:
 
Nikolai Semko #:

в MQL4 бага с морганием нет.
Во вложении mql4 версия

Вот это подгон. Спасибо!

 

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

Nikolai Semko, если вдруг будет время, то напишите, возможно ли это. А если пример с настройкой прозрачности и выбора файла, то вообще прямо выручите.

 
Vitaliy Kuznetsov #:

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

Nikolai Semko, если вдруг будет время, то напишите, возможно ли это. А если пример с настройкой прозрачности и выбора файла, то вообще прямо выручите.

Не понял, в чем трудность загрузить png, как массив uchar и потом вскормить его объекту класса Png. 
Совсем не сложно добавить в класс Png метод LoadPngFromFile(string file_name). Я просто не ставил перед собой такой задачи, поэтому и не реализовывал. Но Вы без труда справитесь.
Посмотрите конструктор класса Png, который на входе принимает массив uchar[] , который содержит в себе весь файл png

*

ЗЫ Ой, я туплю. Уже ведь реализован второй конструктор, который принимает имя файла. Тогда вообще не вижу трудностей.

CPng::CPng(string file_path, bool create_canvas = false, int x = 0, int y = 0);
Документация по MQL5: Файловые операции / FileReadArray
Документация по MQL5: Файловые операции / FileReadArray
  • www.mql5.com
FileReadArray - Файловые операции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vitaliy Kuznetsov #:

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

Nikolai Semko, если вдруг будет время, то напишите, возможно ли это. А если пример с настройкой прозрачности и выбора файла, то вообще прямо выручите.

вот новая версия CPng, в которой есть функция LoadPngFromFile()

Файлы:
Png.mqh  38 kb
 
Nikolai Semko #:
Не понял, в чем трудность загрузить png

Действительно...,  не всегда всё просто)

Nikolai Semko #:
вот новая версия CPng, в которой есть функция LoadPngFromFile()

Спасибо, буду пробовать

 
Nikolai Semko #:
Не понял, в чем трудность загрузить png, как массив uchar и потом вскормить его объекту класса Png. 

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

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

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

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

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

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

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

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


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

 
Vitaliy Kuznetsov #:

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

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

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


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

Файлы:
Resurs.mq5  634 kb
 
Vitaliy Kuznetsov #:

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

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

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