La tela è forte! - pagina 86

 
Aleksandr Slavskii #:

È possibile inserire un file come array e quindi accedere a tale array.


Esempio allegato

Sì, a proposito, funziona. Non sapevo di questa possibilità. Grazie!
Ma la dimensione del file mq4 o mqh sarà 5 volte più grande del file png stesso. Ma è un'opzione abbastanza efficace, perché non influisce sulla dimensione del file ex4 stesso. (sarà la stessa del file ex5).

fxsaber #:

Chiedere agli sviluppatori di inserire il PNG qui.

Sono sicuro che saranno d'accordo.

Dubito che tutti i desideri e le richieste saranno implementati per MT4, specialmente quando è già stato annunciato che il supporto di MT4 finirà presto.

 
Vitaliy Kuznetsov #:

I PNG esterni sono stati risolti, il caricamento, il ridimensionamento e la trasparenza funzionano. Ma...

È realistico compilare un PNG all'interno di un file?

La funzionalità standard ...

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

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

... genera un errore di compilazione

Non sono entrato nel merito del fatto che il software funziona con un file esterno, ma come fare in modo che l'intero prodotto finale sia un unico file?

Altrimenti si perde il senso pratico di questa funzione. Non l'ho provato nella MT5. Nella MT4 si verifica un errore di connessione.


P.S. Presumo che sia teoricamente possibile scrivere uno script che converta il PNG in codice e lo inserisca, ad esempio, in MQH e lavori con loro in un unico contenitore. Ma non sono in grado di scrivere uno script del genere. Gli array di immagini sono una foresta cieca per me.

Oltre a quanto suggerito da Alexander (inserendo l'array uchar[]), c'è anche un metodo di salvataggio attraverso pseudo BMP, di cui ho già parlato

Forum sul trading, sui sistemi di trading automatizzati e sulla verifica delle strategie di trading

Canvas è fantastico!

Nikolai Semko, 2023.09.25 17:09

Purtroppo in MQL4 non c'è la possibilità di allegare una risorsa come array. Ma tutto il resto funziona.
Naturalmente, può essere implementato attraverso tamburelli duri. Ad esempio, inserire un'immagine PNG in un file BMP, cioè aggiungere un'intestazione BMP all'inizio del png e passare il png stesso come immagine bmp (cioè se si apre un tale BMP, ci sarà un rumore di pixel colorati di diversa trasparenza). E poi allegare questo "file bmp" come risorsa in MQL4. Questo può essere necessario per il mercato, in modo che ex4 contenga già un'immagine di un formato png più denso.
Per riferimento: il formato png è circa 10 volte più piccolo della stessa immagine BMP senza perdita di qualità, inoltre supporta la trasparenza completa.
La vera risorsa bmp nel file ex5(ex4) è memorizzata in un formato compattato, ma non di un ordine di grandezza inferiore. È necessario verificare esattamente.

È possibile scrivere uno script che esegua tale conversione da png a bmp (la dimensione della pseudo-immagine di tale file sarà uguale in larghezza alla dimensione del file png stesso, e 1 pixel in altezza).
Ma si può fare con un altro algoritmo: Convertire il PNG con trasparenza in un vero BMP con trasparenza e allegarlo tramite una risorsa. La dimensione del file ex4 sarà leggermente più grande di quella del file png, perché in ex4 la risorsa del file bmp è memorizzata in formato packed. Ho controllato - l'aumento delle dimensioni di ex4 con bmp sarà del 10-30% in più rispetto a ex4 con la stessa immagine in formato png.

Personalmente, preferirei la variante suggerita da Slavsky. Mettere un array uchar separato in un file mqh separato, che conterrà il file png stesso, e poi inserirlo nel codice tramite un include, in modo che l'array gigante non ingombri il codice.
Inoltre, il vantaggio di questo metodo è che non è necessario inserire alcun file grafico nella sandbox di MQL4, come nel caso delle risorse.

 
fxsaber #:

Chiedere agli sviluppatori di inserire un PNG qui.

Sono sicuro che saranno d'accordo.

Aggiungiamolo a MQL5.

 
Aleksandr Slavskii #:

È possibile inserire un file come array e quindi accedere a tale array.

Esempio allegato

incredibile, da quanto tempo questo menu "Inserisci" è in ME? :O

vivi e impara...

 
Renat Fatkhullin #:

Aggiungiamolo a MQL5.

Il mercato mostra che tutti i prodotti sono duplicati per entrambe le piattaforme. Molto probabilmente non utilizzeranno la variante non multipiattaforma, ma rimarranno su BMP, purtroppo.


È possibile allegare qualsiasi file in MQL5 anche adesso.

// resource variables are supported by MQL5 language only
#resource "\\Files\\Picture.png" as uchar PNGBytes[]
Tale allegato creerà un array statico con i dati, non una risorsa. Nel secondo caso, sembra che sia disponibile da altri EX4/5.
 
Nikolai Semko #:
Convertire PNG con trasparenza in BMP reale con trasparenza e allegarlo tramite risorsa.

Questa opzione non funziona in MT4, perché il BMP con canale alfa viene allegato ma non visualizzato.

fxsaber #:

Il mercato mostra che tutti i prodotti sono duplicati per entrambe le piattaforme. Molto probabilmente non utilizzeremo la variante non multipiattaforma e resteremo fermi al BMP, purtroppo.

Penso che PNG sia già diventato multipiattaforma. Funziona già con i file esterni. Esempi sopra riportati da Nikolay.

Aleksandr Slavskii #:

È possibile inserire un file come array e poi accedere a questo array.

In effetti, lo fa. Sono rimasto direttamente sorpreso.


Resta da provare a realizzare in Canvas tutte le cose con la gommosità, la trasparenza e il gioco è fatto - un piccolo miracolo mq4 è pronto.

Naturalmente, questo viene fatto per la multipiattaforma. Perché su MT4 - BMP, e su MT5 - PNG. Non va bene. Tutto dovrebbe essere PNG.

 
Vitaliy Kuznetsov #:

Resta da provare a implementare in Canvas l'intera cosa gommosa e trasparente e il gioco è fatto: un piccolo miracolo mq4 è pronto.

Quindi tutto è già pronto. Si può prendere un esempio di test dalla libreria PNG. Solo la riga con la risorsa

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

cambiatela con la riga

#include <PNG\iconspng.mqh>

dove nel file iconspng.mqh inseriamo l'array png_data[].

È solo necessario ricordare che in MT4 è importante inviare tutti i calcoli costosi da OnChartEvent al timer, altrimenti si ritarderà terribilmente. Pura stronzata da MQL4.
Ora lascerò una versione non laggante.


 
Nikolai Semko #:

Sto per caricare una versione non laggosa.

Sì, non lagga nemmeno se la CPU è in modalità "best perfomance".


File:
MQL4.ZIP  576 kb
 
Andrey Dik #:

incredibile, da quanto tempo esiste questo menu "Inserisci" in ME? :O

vivere e imparare...

Tra i miei file, dove ho sperimentato questo tipo di inserimento, ho trovato un file creato nel novembre 2019. Mi interessava anche prima. Purtroppo non ho trovato lo script in cui è stato salvato il file immagine da tale array.

 
Alexey Viktorov #:

Tra i miei file, dove ho sperimentato questo tipo di inserimento, ho trovato un file creato nel novembre 2019. Mi interessava anche prima. Purtroppo non ho trovato lo script in cui il file immagine è stato salvato da tale array.


super! comoda funzione.
Anche se l'inserimento di ex5 potrebbe essere ancora più comodo se venissero visualizzate le dichiarazioni delle funzioni esportate.